<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Normalized Systems Blog</title>
        <link>https://foundation.stars-end.net/docs/developer-hub/blog</link>
        <description>Normalized Systems Blog</description>
        <lastBuildDate>Fri, 09 Oct 2026 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <item>
            <title><![CDATA[New Foundation]]></title>
            <link>https://foundation.stars-end.net/docs/developer-hub/blog/new-foundation</link>
            <guid>https://foundation.stars-end.net/docs/developer-hub/blog/new-foundation</guid>
            <pubDate>Fri, 09 Oct 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Welcome to the new Foundation!]]></description>
            <content:encoded><![CDATA[<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="welcome-to-the-new-foundation">Welcome to the new Foundation!<a href="https://foundation.stars-end.net/docs/developer-hub/blog/new-foundation#welcome-to-the-new-foundation" class="hash-link" aria-label="Direct link to Welcome to the new Foundation!" title="Direct link to Welcome to the new Foundation!" translate="no">​</a></h2>
<p>The Foundation has received a complete makeover. Instead of pure technical documentation listed per topic, everything
is now organized around specific needs relating documentation: <em>what is this</em>, <em>how do I do this</em>, <em>what exactly are
the options</em>. This blogpost explains how everything is restructured, where to find what you need, what is still
incomplete, and how you can help.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="three-sections-three-needs">Three sections, three needs<a href="https://foundation.stars-end.net/docs/developer-hub/blog/new-foundation#three-sections-three-needs" class="hash-link" aria-label="Direct link to Three sections, three needs" title="Direct link to Three sections, three needs" translate="no">​</a></h2>
<p>The Foundation is now split into three main sections. Each one answers a different kind of question or need, and most
topics appear in all three, each time from a different angle. A fourth section was created to gather NST related
content.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-software-ecosystem-what-is-this-and-how-does-it-fit-together">1. Software Ecosystem: "What is this, and how does it fit together?"<a href="https://foundation.stars-end.net/docs/developer-hub/blog/new-foundation#1-software-ecosystem-what-is-this-and-how-does-it-fit-together" class="hash-link" aria-label="Direct link to 1. Software Ecosystem: &quot;What is this, and how does it fit together?&quot;" title="Direct link to 1. Software Ecosystem: &quot;What is this, and how does it fit together?&quot;" translate="no">​</a></h3>
<p>The Software Ecosystem is the place to start if you are new to a product or concept. It explains what things are and why they exist,
without step-by-step instructions or long lists of attributes. It is organized into two main categories:</p>
<ul>
<li class=""><strong>Engineering Platform</strong>: Prime Radiant, Micro Radiant and the engineering utilities</li>
<li class=""><strong>Engineering Solutions</strong>: The solutions you can build. NS Applications, expanders, metamodel, plugins</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-developer-hub-how-do-i-do-this">2. Developer Hub: "How do I do this?"<a href="https://foundation.stars-end.net/docs/developer-hub/blog/new-foundation#2-developer-hub-how-do-i-do-this" class="hash-link" aria-label="Direct link to 2. Developer Hub: &quot;How do I do this?&quot;" title="Direct link to 2. Developer Hub: &quot;How do I do this?&quot;" translate="no">​</a></h3>
<p>The developer hub gathers guides, tutorials, technical blogs, and contains information on our development process.
<strong>Developer Guides</strong> are practical step-by-step guides that range from getting started with a product, to performing
complex tasks. The developer guides can be classified as "How To's". In <strong>procedure guides</strong> you will be able to scan
through various scenarios, which will lead you to the correct documentation for your specific situation.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-reference-guides-what-exactly-can-i-do-with-this-product">3. Reference Guides: "What exactly can I do with this product?"<a href="https://foundation.stars-end.net/docs/developer-hub/blog/new-foundation#3-reference-guides-what-exactly-can-i-do-with-this-product" class="hash-link" aria-label="Direct link to 3. Reference Guides: &quot;What exactly can I do with this product?&quot;" title="Direct link to 3. Reference Guides: &quot;What exactly can I do with this product?&quot;" translate="no">​</a></h3>
<p>The precise technical documentation you look up while working: model elements, attributes, options, file formats
and APIs. The Reference Guides are considered to be our single source of truth. This way, developer guides do not
contain any new facts, these are all stored here. Most content of the old Foundation can be found here, rather unchanged.
The <em>General</em> section collects the reference that isn't tied to a single product, such as <code>expansionSettings.xml</code>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="a-fourth-section-is-nst-knowledge-in-this-section-you-can-find-everything-nst---related-the-theory-itselftheoretic-articles-white-papers-youtubbe-videos-an-important-addition-to-the-foundation-is-the-glossary-locatedin-nst-knowledge-here-you-can-find-the-most-important-terminology-to-make-sure-we-use-the-same-understanding-ofconcepts">A fourth section, is "NST Knowledge". In this section, you can find everything NST - related. The theory itself,
theoretic articles, white papers, youtubbe videos. An important addition to the Foundation is the glossary (located
in NST knowledge). Here you can find the most important terminology, to make sure we use the same understanding of
concepts.<a href="https://foundation.stars-end.net/docs/developer-hub/blog/new-foundation#a-fourth-section-is-nst-knowledge-in-this-section-you-can-find-everything-nst---related-the-theory-itselftheoretic-articles-white-papers-youtubbe-videos-an-important-addition-to-the-foundation-is-the-glossary-locatedin-nst-knowledge-here-you-can-find-the-most-important-terminology-to-make-sure-we-use-the-same-understanding-ofconcepts" class="hash-link" aria-label="Direct link to A fourth section, is &quot;NST Knowledge&quot;. In this section, you can find everything NST - related. The theory itself,
theoretic articles, white papers, youtubbe videos. An important addition to the Foundation is the glossary (located
in NST knowledge). Here you can find the most important terminology, to make sure we use the same understanding of
concepts." title="Direct link to A fourth section, is &quot;NST Knowledge&quot;. In this section, you can find everything NST - related. The theory itself,
theoretic articles, white papers, youtubbe videos. An important addition to the Foundation is the glossary (located
in NST knowledge). Here you can find the most important terminology, to make sure we use the same understanding of
concepts." translate="no">​</a></h2>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="a-work-in-progress">A Work in Progress<a href="https://foundation.stars-end.net/docs/developer-hub/blog/new-foundation#a-work-in-progress" class="hash-link" aria-label="Direct link to A Work in Progress" title="Direct link to A Work in Progress" translate="no">​</a></h2>
<p>We have moved the current existing documentation, extended the topics with functional sections for the ecosystem, and
gathered or extracted developer guides. But, we are not yet done. Some thing you may notice that will be fully
covered in the next few weeks:</p>
<ul>
<li class="">
<p><strong>Developer Guides are incomplete.</strong> Every product currently has a list of developer guides. However, a fair amount
of topics don't have the complete set of "how to's" yet that they deserve. More step-by-step guides, basics as well
as advanced, will follow.</p>
</li>
<li class="">
<p><strong>Some content can be found twice.</strong> The split between developer guides and reference guides is a challenging one.
Since step-by-step guides used to be intertwined with option definitions, attributes lists, and important facts, you
may find that some content is still placed in both sections. This separation is also an ongoing effort.</p>
</li>
<li class="">
<p><strong>Procedure Guides is in a sample state.</strong> The procedure guides serve as a way to browse situations. However, the
content is currently only sample data for a couple of scenarios. This will still need to be completed.</p>
</li>
<li class="">
<p><strong>Links may point to old locations.</strong> Pages have moved, and not every link has caught up yet. We have tried our
very best to update every link, but a few dead ones might still be left.</p>
</li>
</ul>
<p>Important to note, is that we have not removed anything from the old documentation yet. It is just hidden from the
menu items. If something is missing, unclear or wrong, please let us know.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="foundation-contribution">Foundation Contribution<a href="https://foundation.stars-end.net/docs/developer-hub/blog/new-foundation#foundation-contribution" class="hash-link" aria-label="Direct link to Foundation Contribution" title="Direct link to Foundation Contribution" translate="no">​</a></h2>
<p>Separated according to our different needs, every piece of information will have a clear home. When adding new
content, this might be a little challenging at the beginning. To know where content belongs, we have relied on asking
ourselves the following questions:</p>
<ul>
<li class="">Does it explain <strong>what something is or why it exists</strong>? It goes in the <strong>Ecosystem</strong>.</li>
<li class="">Does it describe <strong>how to do something</strong>, step by step? It goes in the <strong>Developer Hub</strong>.</li>
<li class="">Does it list <strong>exact facts</strong>, such as attributes, options, versions or file formats? It goes in the
<strong>Reference Guides</strong>.</li>
</ul>
<p>We hope everyone will easily find their way in this newly structured Foundation, and we are happy to gather feedback!</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Angular Beam 1.0.0]]></title>
            <link>https://foundation.stars-end.net/docs/developer-hub/blog/angular-beam-1.0.0</link>
            <guid>https://foundation.stars-end.net/docs/developer-hub/blog/angular-beam-1.0.0</guid>
            <pubDate>Tue, 18 Aug 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Changes and improvements]]></description>
            <content:encoded><![CDATA[<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="changes-and-improvements">Changes and improvements<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-beam-1.0.0#changes-and-improvements" class="hash-link" aria-label="Direct link to Changes and improvements" title="Direct link to Changes and improvements" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="angular-22">Angular 22<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-beam-1.0.0#angular-22" class="hash-link" aria-label="Direct link to Angular 22" title="Direct link to Angular 22" translate="no">​</a></h3>
<p>The angular-expanders have upgraded to Angular 22. It is possible to use the new features and enhancements of this update.
Angular 22 also addresses various security vulnerabilities.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="base-feature-modules">Base feature modules<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-beam-1.0.0#base-feature-modules" class="hash-link" aria-label="Direct link to Base feature modules" title="Direct link to Base feature modules" translate="no">​</a></h3>
<p><strong>This is only available when using the standard-api</strong></p>
<p>The base-components (account, assets, utils) could be accessed through the knockout UI, but this wasn't yet possible in the Angular UI.
Now that has changed. Next to the base-components there are now base-feature-modules which allow us to include some default feature modules.
With this update there are corresponding feature modules for the account, assets and utils base components. Allowing you to access and update
these components and data elements just as in the knockout UI.</p>
<p><img decoding="async" loading="lazy" alt="Account component" src="https://foundation.stars-end.net/assets/images/account_component-e1f327f19214de8f0ea1c241c1ad3145.jpg" width="1916" height="905" class="img_ev3q"></p>
<p>This includes a custom My User page accessible via the user icon in the top right. On this page users can see their own
info and change their password (the password only applies for basic auth). The ability to view their info and change their
password can be configured through the data access.</p>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>Include base feature modules</div><div class="admonitionContent_BuS1"><p>You have to add the base feature modules to your angularApp manually or by using the <a class="" href="https://foundation.stars-end.net/blog/angular-beam-1.0.0#generate-default-angular-app">GenerateDefaultAngularApp transmuter</a>.</p><div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC">AngularApp</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">angularApp</span><span class="token tag" style="color:#00009f"></span><br></span><span class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">    </span><span class="token tag attr-name" style="color:#00a4db">xmlns</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">https://schemas.normalizedsystems.org/xsd/angularProjects/7/0/0</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></span><span class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">    </span><span class="token tag attr-name" style="color:#00a4db">type</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">angularProjects::AngularApp</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    ...</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">featureModules</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    ...</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">featureModule</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">utils</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">featureModule</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">featureModule</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">account</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">featureModule</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">featureModule</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">assets</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">featureModule</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">featureModules</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">angularApp</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></span></code></pre></div></div></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="menu-changes">Menu changes<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-beam-1.0.0#menu-changes" class="hash-link" aria-label="Direct link to Menu changes" title="Direct link to Menu changes" translate="no">​</a></h3>
<ul>
<li class="">By default, a menu is expanded to access each data view.</li>
<li class="">More customization possibilities e.g. change the menu based on the user profile.</li>
<li class="">A new method <code>updateIcon</code> was added. This method changes the icon of a MenuItem at runtime.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="application-properties">Application properties<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-beam-1.0.0#application-properties" class="hash-link" aria-label="Direct link to Application properties" title="Direct link to Application properties" translate="no">​</a></h3>
<p><strong>This is only available when using the standard-api</strong></p>
<p>You can access the application properties through a button in the bottom left of the sidebar. This will show metadata about the
application, such as the version, used expansion resources and more.</p>
<p><img decoding="async" loading="lazy" alt="Application properties" src="https://foundation.stars-end.net/assets/images/application_properties-d0ab7b162d76f37ce273e0c239ffb89b.jpg" width="1918" height="908" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="direct-imports">Direct imports<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-beam-1.0.0#direct-imports" class="hash-link" aria-label="Direct link to Direct imports" title="Direct link to Direct imports" translate="no">​</a></h3>
<p>The imports defined in the mapping files of Angular expanders required the use of the <code>from</code> keyword. However some
imports don't use, and can't use the <code>from</code> keyword. Therefore a new <code>direct</code> import type has been created to allow imports without the <code>from</code> keyword.</p>
<div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">uses</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">type</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">direct</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">eval</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value punctuation" style="color:#393A34">'</span><span class="token tag attr-value" style="color:#e3116c">prismjs'</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain">  // import "prismjs";</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="generate-default-angular-app">Generate default Angular app<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-beam-1.0.0#generate-default-angular-app" class="hash-link" aria-label="Direct link to Generate default Angular app" title="Direct link to Generate default Angular app" translate="no">​</a></h3>
<p>The <code>GenerateDefaultAngularApp</code> transmuter will add an AngularApp to your project, if not already present. It will also
generate FeatureModules, DataConnectors and DataViews based no the elements model. The transmuter can be performed multiple
times and is a great way to keep the elements model and Angular model in sync.</p>
<div class="undefined anchor transmutation-anchor" id="transmutation-generatedefaultangularapp"><div class="card transmutation-card"><div class="transmutation-card-header"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-list-checks card-icon" aria-hidden="true"><path d="M13 5h8"></path><path d="M13 12h8"></path><path d="M13 19h8"></path><path d="m3 17 2 2 4-4"></path><path d="m3 7 2 2 4-4"></path></svg>Transmutation<a class="hash-link" href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-beam-1.0.0#transmutation-generatedefaultangularapp" title="Direct link to transmutation"></a></div><div class="card__header"><span class="transmutation"><span class="transmutation-name">GenerateDefaultAngularApp</span><code class="badge badge--primary">Application</code></span></div><div class="card__body"><p>Generate a FeatureModule per Component, and a DataConnector and DataView per DataElement, where the <code>noViewLayer</code> option is not present.</p></div></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="migration-guide">Migration guide<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-beam-1.0.0#migration-guide" class="hash-link" aria-label="Direct link to Migration guide" title="Direct link to Migration guide" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="versions">Versions<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-beam-1.0.0#versions" class="hash-link" aria-label="Direct link to Versions" title="Direct link to Versions" translate="no">​</a></h3>
<p>The <code>angular-beam::1.0.0</code> requires <code>net.democritus:base-components::2026.6.0</code>. The base-components are included in the
<code>minimal-jee-beam</code> and <code>jee-backend-beam</code>, so updating them will satisfy this requirement.</p>
<div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC">expansionSettings.xml</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">expansionResources</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  ...</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">expansionResource</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">org.normalizedsystems.beam:minimal-jee-beam</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">version</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">2.3.0</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">expansionResources</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></span></code></pre></div></div>
<div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC">expansionSettings.xml</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">expansionResources</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  ...</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">expansionResource</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">org.normalizedsystems.beam:jee-backend-beam</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">version</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">1.1.0</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">expansionResources</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></span></code></pre></div></div>
<p>When using Angular in combination with the <strong>standard-api</strong> as the control layer you should use the following.</p>
<div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC">expansionSettings.xml</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">expansionResources</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  ...</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">expansionResource</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">org.normalizedsystems.beam:angular-beam</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">version</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">1.0.0</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">expansionResource</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">net.democritus.angular.stdapi:angular-stdapi-expanders</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">version</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">4.0.0</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">expansionResource</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">org.normalizedsystems.beam:standard-api-beam</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">version</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">2.0.0</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">expansionResources</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></span></code></pre></div></div>
<p>When using Angular in combination with the <strong>service-api</strong> as the control layer you should use the following.</p>
<div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC">expansionSettings.xml</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">expansionResources</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  ...</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">expansionResource</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">org.normalizedsystems.beam:angular-beam</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">version</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">1.0.0</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">expansionResource</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">net.democritus.angular.svcapi:angular-svcapi-expanders</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">version</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">3.8.0</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">expansionResource</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">org.normalizedsystems.beam:service-api-beam</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">version</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">1.3.0</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">expansionResources</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="angular-22-1">Angular 22<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-beam-1.0.0#angular-22-1" class="hash-link" aria-label="Direct link to Angular 22" title="Direct link to Angular 22" translate="no">​</a></h3>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="node-version-requirement">Node version requirement<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-beam-1.0.0#node-version-requirement" class="hash-link" aria-label="Direct link to Node version requirement" title="Direct link to Node version requirement" translate="no">​</a></h4>
<p>The minimum required node version has changed to	<code>^22.22.3</code> || <code>^24.15.0</code> || <code>^26.0.0</code></p>
<p>Make sure your local machine and Dockerfile satisfy this requirement. The build pipelines on jenkins have been updated to use node <code>24.19.0</code>.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="changedetectionstrategy">ChangeDetectionStrategy<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-beam-1.0.0#changedetectionstrategy" class="hash-link" aria-label="Direct link to ChangeDetectionStrategy" title="Direct link to ChangeDetectionStrategy" translate="no">​</a></h4>
<p>The Default Change Detection Strategy is now <code>OnPush</code>. Angular's change detection uses a more optimized approach by
default called <code>ChangeDetectionStrategy.OnPush</code>. This strategy makes components only run change detection when:</p>
<ol>
<li class="">An input or Signal variable changes (by reference).</li>
<li class="">An event originates from the component or its children.</li>
<li class=""><code>ChangeDetectorRef.markForCheck()</code> is called manually.</li>
</ol>
<p>This means components with:</p>
<ul>
<li class="">variables might not update when the variable gets a new value.</li>
</ul>
<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">protected</span><span class="token plain"> asyncValue</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token builtin">string</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"default value"</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">myService</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">getValue</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">subscribe</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">newValue</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// OnPush won't trigger change detection for a local variable mutation.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">asyncValue </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> newValue</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Won't be updated in component's template</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<ul>
<li class="">functions in templates are not constantly being run anymore</li>
</ul>
<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// DOES NOT WORK AS EXPECTED</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Template: &lt;p&gt;{{ getFormattedName() }}&lt;/p&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">name </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'Alex'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">setTimeout</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">name </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'Jordan'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// getFormattedName() WILL NOT RE-RUN!</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// OnPush won't trigger change detection for a local variable mutation.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1000</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">getFormattedName</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">name</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">toUpperCase</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<p>Fix:</p>
<ul>
<li class="">Use signals and computed signals to define variables</li>
<li class="">Use previous behavior with <code>ChangeDetectionStrategy.Eager</code> (as a last resort)</li>
</ul>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="redundant-nullish-checks-trigger-compile-errors">Redundant Nullish Checks Trigger Compile Errors<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-beam-1.0.0#redundant-nullish-checks-trigger-compile-errors" class="hash-link" aria-label="Direct link to Redundant Nullish Checks Trigger Compile Errors" title="Direct link to Redundant Nullish Checks Trigger Compile Errors" translate="no">​</a></h4>
<p>Angular’s strict template type-checker now flags unnecessary optional chaining (<code>?.</code>) or nullish coalescing (<code>??</code>) on non-nullable variables.</p>
<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// Fails at compile time if `a` is guaranteed non-nullable</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> result </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> a</span><span class="token operator" style="color:#393A34">?.</span><span class="token plain">b</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> val </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> a </span><span class="token operator" style="color:#393A34">??</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"default"</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// Remove redundant operators</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> result </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> a</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">b</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> val </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> a</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="optional-chaining-evaluates-to-undefined">Optional Chaining Evaluates to <code>undefined</code><a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-beam-1.0.0#optional-chaining-evaluates-to-undefined" class="hash-link" aria-label="Direct link to optional-chaining-evaluates-to-undefined" title="Direct link to optional-chaining-evaluates-to-undefined" translate="no">​</a></h4>
<p>Short-circuited optional chaining expressions always evaluate to <code>undefined</code> (never <code>null</code>).</p>
<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// Update strict equality checks expecting `null` to check for `undefined` instead, or use loose equality (`== null`) to catch both.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">a</span><span class="token operator" style="color:#393A34">?.</span><span class="token plain">b</span><span class="token operator" style="color:#393A34">?.</span><span class="token plain">c </span><span class="token operator" style="color:#393A34">===</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">null</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// false</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">a</span><span class="token operator" style="color:#393A34">?.</span><span class="token plain">b</span><span class="token operator" style="color:#393A34">?.</span><span class="token plain">c </span><span class="token operator" style="color:#393A34">===</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">undefined</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// true</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">a</span><span class="token operator" style="color:#393A34">?.</span><span class="token plain">b</span><span class="token operator" style="color:#393A34">?.</span><span class="token plain">c </span><span class="token operator" style="color:#393A34">==</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">null</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// true</span><br></span></code></pre></div></div>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="reportprogress-deprecation">reportProgress deprecation<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-beam-1.0.0#reportprogress-deprecation" class="hash-link" aria-label="Direct link to reportProgress deprecation" title="Direct link to reportProgress deprecation" translate="no">​</a></h4>
<p>The <code>reportProgress</code> field of HTTP requests has been deprecated and replaced by <code>reportDownloadProgress</code> and <code>reportUploadProgress</code>.
Custom code that used this should migrate to the new fields.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="baseurl-no-longer-allowed">baseUrl no longer allowed<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-beam-1.0.0#baseurl-no-longer-allowed" class="hash-link" aria-label="Direct link to baseUrl no longer allowed" title="Direct link to baseUrl no longer allowed" translate="no">​</a></h4>
<p>The <code>baseUrl</code> field is no longer allowed in the tsconfig.json. Custom paths in the tsconfig should be adjusted.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="data-access">Data access<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-beam-1.0.0#data-access" class="hash-link" aria-label="Direct link to Data access" title="Direct link to Data access" translate="no">​</a></h3>
<p><strong>This only affects projects using Angular, standard-api and have enabled the data access in Angular</strong></p>
<p>Fixed incorrect mapping of canSeeUpdatePage, canSeeFilterPage, canSeeFetchPage, canSubmitUpdate, canSubmitFilter and canSubmitFetch in the LegacyMapperService expanders.
Instead of mapping to <code>update</code> and <code>fetch</code> they will now map to <code>modify</code> and <code>status</code>. Applications that have configured
data access to use <code>update</code> and <code>fetch</code> will have to update them to <code>modify</code> and <code>status</code>.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="custom-branding">Custom branding<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-beam-1.0.0#custom-branding" class="hash-link" aria-label="Direct link to Custom branding" title="Direct link to Custom branding" translate="no">​</a></h3>
<ul>
<li class="">If the angularApp uses the <code>angular.hasCustomBranding</code> option, The following files have had code replaced by feature anchors as part of a fix.<!-- -->
<ul>
<li class=""><code>branding-text-font</code> in <code>index.html</code></li>
<li class=""><code>branding-icon-font</code> in <code>index.html</code></li>
<li class=""><code>branding-sidebar</code> in <code>layout.component.scss</code></li>
</ul>
</li>
</ul>
<p>To migrate add back the following harvests in the corresponding files.</p>
<p><code>index.html</code>:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">-- anchor:custom-branding-icon-font:start</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  &lt;link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200"/&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">-- anchor:custom-branding-icon-font:end</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">-- anchor:custom-branding-text-font:start</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  &lt;link rel="preconnect" href="https://fonts.googleapis.com"&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  &lt;link rel="preconnect" href="https://fonts.gstatic.com" crossorigin&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  &lt;link href="https://fonts.googleapis.com/css2?family=Maven+Pro:wght@400;500;700&amp;display=swap" rel="stylesheet"&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">-- anchor:custom-branding-text-font:end</span><br></span></code></pre></div></div>
<p><code>layout.component.scss</code>:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">-- anchor:custom-branding-sidebar:start</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    img {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      height: 100%;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      padding: 1.25rem 0 1.25rem 1.25rem;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      &amp;.compact-mode {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        padding: 1.438rem 0 1.438rem 0.875rem;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      }</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    }</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">-- anchor:custom-branding-sidebar:end</span><br></span></code></pre></div></div>]]></content:encoded>
            <category>releases</category>
            <category>migration-guide</category>
            <category>angular-expanders</category>
            <category>angular-beam</category>
        </item>
        <item>
            <title><![CDATA[Angular Out of the Box]]></title>
            <link>https://foundation.stars-end.net/docs/developer-hub/blog/angular-ootb</link>
            <guid>https://foundation.stars-end.net/docs/developer-hub/blog/angular-ootb</guid>
            <pubDate>Tue, 18 Aug 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[This blog post discusses the recent efforts made towards an Out Of The Box (OOTB) Angular front-end. Our efforts are]]></description>
            <content:encoded><![CDATA[<p>This blog post discusses the recent efforts made towards an <strong>Out Of The Box (OOTB) Angular front-end</strong>. Our efforts are
focussed on reducing friction when setting up Angular applications. And, even though the concept of Knockout (KO) feature
parity is a controversial topic, we consider these efforts to be another significant step in that direction.</p>
<p>The following main things were added:</p>
<ul>
<li class=""><strong>OOTB menu:</strong> Menu items are now added by default, meaning the sidebar will not be empty anymore. However, if
the default menu setup is not what you need, the menu does need to be created custom like before.</li>
<li class=""><strong>Transmuter:</strong> There used to be a transmuter <code>Upgrade to Angular Project</code> on applications. This was
reworked into transmuter <code>Generate Default Angular App</code>, helping you create an Angular model based on your existing
<code>elements</code> model.</li>
<li class=""><strong>Default Angular App initialization in project initializer:</strong> During project initialization an Angular app will now
be included by default. You'll need to explicitly opt out if you don't want Angular.</li>
<li class=""><strong>Support for base components:</strong> The OOTB Angular front-end includes CRUD pages for base components, so you don't have to use KO for this anymore.</li>
</ul>
<p>These changes present themselves in two ways:</p>
<ul>
<li class="">OOTB Angular for a new project</li>
<li class="">Adding an OOTB Angular frontend to an existing project</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="scenario-1-new-projects-with-angular-app">Scenario 1: New Projects with Angular App<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-ootb#scenario-1-new-projects-with-angular-app" class="hash-link" aria-label="Direct link to Scenario 1: New Projects with Angular App" title="Direct link to Scenario 1: New Projects with Angular App" translate="no">​</a></h2>
<p>You can include Angular as a frontend when running the <a class="" href="https://foundation.stars-end.net/docs/tools/ns-initializer">NS Initializer</a> to set up a new project.</p>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionContent_BuS1"><p>For now, the initializer will always add KO as a frontend as well. The Angular frontend will run alongside it on a different port.</p></div></div>
<p><strong>Prerequisites</strong>:</p>
<ul>
<li class="">Have Yarn installed on your computer. This is the preferred package manager within NSX, employees should consult the "Software required to install" discourse post to install Yarn correctly.</li>
<li class="">Have version <code>7.0.0</code> of the <a class="" href="https://foundation.stars-end.net/docs/tools/ns-initializer">NS Initializer</a> installed.</li>
</ul>
<p><strong>Steps to follow</strong>:</p>
<ol>
<li class="">Create an empty folder for your new project.</li>
<li class="">Initialize a project using:<!-- -->
<ul>
<li class="">Using µRadiant: Go to <code>Initialize Project</code> and choose "Application".</li>
<li class="">Using CLI: <code>nsinit app</code>.</li>
<li class="">In both cases, make sure to set <code>Include Angular frontend?</code> to true, as it will be by default.</li>
</ul>
</li>
<li class="">Expand the application. You should see two folders in the <code>/expansions</code> directory: one for the backend with KO,
and one for the Angular frontend.</li>
<li class="">Run <code>yarn install</code> in the <code>expansions/{your-project-name}-angular</code> directory. This installs the packages the Angular application
depends on.</li>
<li class="">Build the frontend and backend using the scripts in <code>/scripts</code>.</li>
<li class="">Start the application by running the <code>start_default_services.nss</code> script. This will result in KO running on port <code>8080</code> and Angular on port <code>8081</code>.
The gateway runs on port <code>8082</code>. It is the preferred entry point of the application and can be used to access both the Angular and KO frontend, e.g. <code>localhost:8082</code> (Angular), <code>localhost:8082/&lt;jeeAppName&gt;</code> (KO).</li>
<li class="">Enter the username and password from the <code>.credentials</code> file to login. Make sure you add this file to your <code>.gitignore</code>.</li>
</ol>
<p>You now have a Knockout and an Angular frontend for your application.</p>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionContent_BuS1"><p>Remember that changes to the <code>elements</code> model, like adding a DataElement, are only automatically reflected in the KO
frontend and not in the Angular frontend, since Angular has its own metamodel. If you want to transfer changes in
your <code>elements</code> model to the Angular app, you can run the transmuter described <a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-ootb#1-steps-to-add-angular-model-files" class="">below</a>.</p></div></div>
<p>These steps are also included in your project's documentation under <code>documentation/local_setup_guide.md</code>.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="scenario-2-adding-an-angular-frontend-to-an-existing-ko-application">Scenario 2: Adding an Angular frontend to an existing KO application<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-ootb#scenario-2-adding-an-angular-frontend-to-an-existing-ko-application" class="hash-link" aria-label="Direct link to Scenario 2: Adding an Angular frontend to an existing KO application" title="Direct link to Scenario 2: Adding an Angular frontend to an existing KO application" translate="no">​</a></h2>
<p>A fully OOTB Angular application can be added as a frontend alongside an existing KO frontend.
This process consists of two transmutation steps:</p>
<ol>
<li class=""><strong><a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-ootb#1-steps-to-add-angular-model-files" class="">Adding the Angular model files</a></strong></li>
<li class=""><strong><a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-ootb#2-steps-to-add-angular-application-to-your-docker-setup" class="">Adding the Angular application to your project setup</a>.</strong></li>
</ol>
<div class="theme-admonition theme-admonition-warning admonition_xJq3 alert alert--warning"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></span>disclaimer</div><div class="admonitionContent_BuS1"><p>The Angular expanders do not support every technology a KO application supports. If your goal is to fully replace the KO application in the future, you'll need to migrate some of these technologies first to keep the same functionality available.</p><ul>
<li class="">Data commands are not supported in Angular. Instead, Angular uses <a class="" href="https://foundation.stars-end.net/docs/development/jee-application-stack/addons/data-operations/">data operations</a>, due to its more unrestricted nature.</li>
<li class="">A <a class="" href="https://foundation.stars-end.net/docs/development/jee-application-stack/addons/standard-api-expanders/">standard-api</a> (std-api) control layer is required,
since Struts are not supported. You can also use the service-api (svc-api), but only the std-api guarantees full feature-parity
with Struts.</li>
<li class="">It is highly recommended to first migrate your project to the most recent version of the <a class="" href="https://foundation.stars-end.net/docs/development/project-model/">Project Setup expanders</a>. This ensures your
project has the same structure as other projects within NSX. If you do not use the project-expanders yet, you can follow
this <a class="" href="https://foundation.stars-end.net/docs/development/project-model/migration-guide">migration guide</a>. Without the default project setup, you might encounter problems that are already fixed.</li>
<li class="">Have Yarn installed on your computer. This is the preferred package manager within NSX, employees should consult the "Software required to install" discourse post to install Yarn correctly.</li>
</ul></div></div>
<div class="theme-admonition theme-admonition-caution admonition_xJq3 alert alert--warning"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></span>caution</div><div class="admonitionContent_BuS1"><p>Custom code added to your KO application can not be automatically transferred or translated to Angular code.</p></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-steps-to-add-angular-model-files">1. Steps to add Angular model files:<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-ootb#1-steps-to-add-angular-model-files" class="hash-link" aria-label="Direct link to 1. Steps to add Angular model files:" title="Direct link to 1. Steps to add Angular model files:" translate="no">​</a></h3>
<p>Angular applications have their own metamodel. A transmuter has been added that creates an Angular model based on
your existing Elements model. The result of the transmuter will be default CRUD screens for all the data elements in
your model, unless they have the <code>angular.noViewLayer</code> option.</p>
<p><strong>Steps to run the <code>Generate Default Angular App</code> transmuter:</strong></p>
<ol>
<li class="">Add the following expansionResources to your <code>expansionSettings.xml</code>:<!-- -->
<ul>
<li class=""><a class="" href="https://foundation.stars-end.net/docs/releases/changelog/angular-beam">angular-beam</a></li>
<li class=""><a class="" href="https://foundation.stars-end.net/docs/releases/changelog/angular-stdapi-expanders">angular-stdapi-expanders</a></li>
<li class=""><a class="" href="https://foundation.stars-end.net/docs/development/jee-application-stack/addons/data-operations/getting-started">data-operations-bundle</a> (optional, but recommended)</li>
</ul>
</li>
</ol>
<div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">&lt;!-- Use the specified versions or newer --&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">expansionResource</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">org.normalizedsystems.beam:angular-beam::1.0.0</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">expansionResource</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">expansionResource</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">net.democritus.angular.stdapi:angular-stdapi-expanders::4.0.0</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">expansionResource</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">expansionResource</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">net.democritus.bundles:data-operations-bundle::2.5.0</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">expansionResource</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></span></code></pre></div></div>
<ol start="2">
<li class="">Open µRadiant. If you already have it opened, you'll have to reload the project after adding the expansion resources.</li>
<li class="">Install version <code>1.4.1</code> or newer of the <code>net-democritus-angular-plugin</code> if you haven't already.</li>
<li class="">Click on your application and run the <code>Generate Default Angular App</code> transmuter.</li>
</ol>
<img src="https://foundation.stars-end.net/img/blog/2026-08-xx-angular-out-of-the-box/angular_transmuter_light.png" alt="datamodel" class="themedComponent_mlkZ themedComponent--light_NVdE" style="max-height:400px;width:auto"><img src="https://foundation.stars-end.net/img/blog/2026-08-xx-angular-out-of-the-box/angular_transmuter_dark.png" alt="datamodel" class="themedComponent_mlkZ themedComponent--dark_xIcU" style="max-height:400px;width:auto">
<p style="font-style:italic;margin-top:8px;color:var(--ifm-color-emphasis-700)"></p><p>Generate Default Angular App transmuter</p><p></p>
<div class="theme-admonition theme-admonition-caution admonition_xJq3 alert alert--warning"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></span>caution</div><div class="admonitionContent_BuS1"><p>To make the Angular model show up in µRadiant for the first time, <strong>you have to restart it</strong>.
The transmuter will add an Angular <code>expansion</code> to your <code>expansionSettings.xml</code> file, but the currently loaded model files do not include the newly generated expansion yet.</p></div></div>
<p>To verify the transmuter worked correctly, you can compare the new Angular <code>expansion</code> in your <code>expansionSettings.xml</code> with the following snippet:</p>
<div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">expansions</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  ...</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">expansion</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">target</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">your-app-name</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">target</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">profile</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">Std API yarn Ln0x access</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">profile</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">type</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">angularProjects::AngularApp</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">type</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">expansion</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">expansions</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></span></code></pre></div></div>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionContent_BuS1"><p>The <code>Angular</code> meta-model is separated from the <code>elements</code> meta-model, so it needs to be updated separately.
Since transmuters are designed to be idempotent, you can run the transmutation each time you want to update your
<code>Angular</code>
model after a change in the <code>elements</code> model.</p></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-steps-to-add-angular-application-to-your-docker-setup">2. Steps to add Angular application to your docker setup:<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-ootb#2-steps-to-add-angular-application-to-your-docker-setup" class="hash-link" aria-label="Direct link to 2. Steps to add Angular application to your docker setup:" title="Direct link to 2. Steps to add Angular application to your docker setup:" translate="no">​</a></h3>
<p>After adding the model files, the next step is to extend your project-setup so the Angular frontend can be deployed to an
environment.
The recommended way to set up the Angular application in docker is to add <a class="" href="https://foundation.stars-end.net/docs/development/project-model/project/artifacts/">Artifacts</a> and <a class="" href="https://foundation.stars-end.net/docs/development/project-model/project/services">Services</a> to your project-setup model.
Since this project setup can be modelled, a second transmuter (<code>Generate Angular Setup</code>) was developed to
incorporate the new Angular app.</p>
<ol>
<li class="">Open μRadiant and select <code>.nsproject</code> in the <code>project</code> button in the left panel. This opens the project setup model.</li>
<li class="">Open the "expansion-settings" tab and make sure the project-expanders are at least on version 3.4.0. If not, you can change this in your <code>/.nsproject/expansionSettings.xml</code>.</li>
<li class="">In μRadiant, click on your project and run the <code>Generate Angular Setup</code> transmuter. This will create Services and Artifacts for the gateway and your Angular application.</li>
</ol>
<img src="https://foundation.stars-end.net/img/blog/2026-08-xx-angular-out-of-the-box/project_setup_transmuter_light.png" alt="datamodel" class="themedComponent_mlkZ themedComponent--light_NVdE" style="max-height:400px;width:auto"><img src="https://foundation.stars-end.net/img/blog/2026-08-xx-angular-out-of-the-box/project_setup_transmuter_dark.png" alt="datamodel" class="themedComponent_mlkZ themedComponent--dark_xIcU" style="max-height:400px;width:auto">
<p style="font-style:italic;margin-top:8px;color:var(--ifm-color-emphasis-700)"></p><p>Generate Angular Setup transmuter</p><p></p>
<ol start="4">
<li class="">Run the <code>rejuvenate_nsproject_setup.nss</code> script. New images will be created in your <code>/docker</code> folder, as well as some scripts in your <code>/scripts</code> folder.</li>
<li class="">Expand the application.</li>
<li class="">Add an empty <code>yarn.lock</code> file in <code>expansions/..-angular</code> if it doesn't exist yet. This file is required to install the packages defined in the <code>package.json</code> file that the Angular application depends on. You should harvest the <code>yarn.lock</code> file and include it in Git.</li>
<li class="">Run the build scripts.</li>
<li class="">Run the <code>start_default_services.nss</code> script. This will copy the built code to the <code>docker/../deploy</code> folder and run the application in docker containers, resulting in KO running on port <code>8080</code> and Angular on port <code>8081</code>.
The gateway runs on port <code>8082</code>. It is the preferred entry point of the application and can be used to access both the Angular and KO frontend, e.g. <code>localhost:8082</code> (Angular), <code>localhost:8082/&lt;jeeAppName&gt;</code> (KO).</li>
</ol>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionContent_BuS1"><p>If you want to run the Angular application locally without Docker, and see your code changes reflect in the application in real-time, you can run <code>yarn start</code> in your <code>expansions/..-angular</code> folder. This will hot deploy the Angular application on a different port, usually <code>4200</code>.</p></div></div>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="possible-issues">Possible issues<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-ootb#possible-issues" class="hash-link" aria-label="Direct link to Possible issues" title="Direct link to Possible issues" translate="no">​</a></h2>
<ul>
<li class="">Finders with a name that do not follow <a class="" href="https://foundation.stars-end.net/docs/development/application-model/naming/">the naming convention</a> cause compile errors in Angular.</li>
<li class="">When a project has defined custom networks in the <code>docker-compose.yaml</code> file, the default gateway setup no longer works. The network alias has to be changed or a new network needs to be created in order for the gateway to find the necessary services.</li>
<li class="">For the basic auth login process, the <code>/account/account</code> endpoint is called. If the user does not have access to this endpoint, you can change the value of the <code>angular.basicAuth.enable</code> option on AngularApp to any different endpoint that requires the user to be logged in.</li>
<li class="">If you encounter an issue along the lines of <code>All custom valueTypes should have a nativeType for angular:form-input, angular:detail-field, ...</code> you can exclude the field from the view-layer, or change the type of the field.</li>
</ul>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Modular beams]]></title>
            <link>https://foundation.stars-end.net/docs/developer-hub/blog/modular-beams</link>
            <guid>https://foundation.stars-end.net/docs/developer-hub/blog/modular-beams</guid>
            <pubDate>Tue, 16 Jun 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[This blog post introduces a fresh set of beam releases. The following new releases are now available.]]></description>
            <content:encoded><![CDATA[<p>This blog post introduces a fresh set of beam releases. The following new releases are now available.</p>
<ul>
<li class=""><code>minimal-jee-beam:2.2.0</code></li>
<li class=""><code>standard-api-beam:2.0.0</code></li>
<li class=""><code>service-api-beam:1.3.0</code></li>
<li class=""><code>jee-backend-beam:1.0.0</code> <strong>(new)</strong></li>
<li class=""><code>struts-api-beam:1.0.0</code> <strong>(new)</strong></li>
<li class=""><code>knockout-frontend-beam:1.0.0</code> <strong>(new)</strong></li>
</ul>
<p>These releases mark a milestone in the modularization of the JEE-stack. For the first time it is possible to offer
modular beams for frontend and control layer. Hence the introduction of <code>jee-backend-beam</code>,
<code>struts-api-beam</code> and <code>knockout-frontend-beam</code>.</p>
<p>When upgrading please read the changelog for each individual beam. You can find them in their respective GitHub repositories.</p>
<div class="theme-admonition theme-admonition-caution admonition_xJq3 alert alert--warning"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></span>caution</div><div class="admonitionContent_BuS1"><p>The new beams require at least the following versions:</p><ul>
<li class="">Expanders Maven Plugin <code>expanders-maven-plugin:2026.1.0</code></li>
<li class="">Micro Radiant Plugin <code>net-democritus-prime-plugin:1.16.0</code></li>
</ul></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="splitting-beams">Splitting beams<a href="https://foundation.stars-end.net/docs/developer-hub/blog/modular-beams#splitting-beams" class="hash-link" aria-label="Direct link to Splitting beams" title="Direct link to Splitting beams" translate="no">​</a></h2>
<p>For a long time, our primary JEE beam, the <code>minimal-jee-beam</code>, was a comprehensive package that included everything from
the backend logic to the Struts 2 API and Knockout.js frontend. This made it easy to get started with a full-stack
application, but with the arrival of API and frontend alternatives, it often forced developers to include technologies
they didn't necessarily need.</p>
<p>By making the beams and underlying expansion resources more modular you have the option to leave some of these legacy technologies behind.
This has benefits such as having fewer vulnerabilities, smaller artifacts and cleaner models.</p>
<p>The purpose of expander beams has always been to provide functional units to developers. Ideally these functional units are
small so that they can be more easily maintained and updated. However, as functionality keeps getting added, eventually
expanders beams become large enough that they can be split into smaller functional units. On the other hand some beams have always
been a bit too large, encompassing a few too many concerns, such as the <code>minimal-jee-beam</code>, but it was not technically
possible to split them yet. In both cases, <strong>at some point large beams will inevitably be split into smaller beams</strong>.
In this case the <code>minimal-jee-beam</code> has been split into three distinct beams:</p>
<ul>
<li class=""><code>jee-backend-beam</code>: This is the core of your application: Maven skeleton, JPA data layer, EJB logic layer and JNDI proxy layer.</li>
<li class=""><code>struts-api-beam</code>: Provides a full control layer implemented in Struts2. Including actions, interceptors, and the legacy web-based API.</li>
<li class=""><code>knockout-frontend-beam</code>: Contains a full view layer implemented in Knockout.js UI.</li>
</ul>
<p>When combined, these three beams will expand exactly the same application as the <code>minimal-jee-beam</code>. However it
does not contain <code>net.democritus:Expanders</code> anymore which will have an impact if you include other expansion resources in your
expansion.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="modularizing-netdemocritusexpanders">Modularizing net.democritus::Expanders<a href="https://foundation.stars-end.net/docs/developer-hub/blog/modular-beams#modularizing-netdemocritusexpanders" class="hash-link" aria-label="Direct link to Modularizing net.democritus::Expanders" title="Direct link to Modularizing net.democritus::Expanders" translate="no">​</a></h2>
<p>Splitting the minimal-jee-beam was no trivial feat. Many expansion resources needed to be updated (and many other still
need to be updated), including the infamous <code>net.democritus:Expanders</code>.
That has historically been an expansion resource which contained many expanders spanning over various technologies and concerns.
Over the past years and months large efforts have been made to modularize the <code>net.democritus:Expanders</code> expansion resource.
Modularizing the <code>net.democritus:Expanders</code> means that knockout and struts related expanders are isolated and split into
different modules. Also the different layers in the JEE backend are split into modules. Each module results in an expansion
resource that can be used independently.</p>
<p>Below is a simplified overview of how <code>net.democritus:Expanders</code> has changed in preparation for the new beam releases.</p>
<p><strong>net.democritus.Expanders:9.3.0</strong>:</p>
<!-- -->
<p><strong>net.democritus.Expanders:9.4.0</strong>:</p>
<!-- -->
<div class="theme-admonition theme-admonition-warning admonition_xJq3 alert alert--warning"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></span>end-of-life</div><div class="admonitionContent_BuS1"><p>The <code>net.democritus:Expanders</code> expansion resource will not receive new updates and will stay at <code>9.4.0</code>. Expansion resources
should move away from using <code>net.democritus:Expanders</code> and use the new modules instead.</p><p><code>net.democritus:Expanders::9.4.0</code> solely exists to make the migration away from <code>net.democritus:Expanders</code> easier and is intended
to be used for backwards compatibility while expansion resources migrate to the submodules.</p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="problems-with-splitting-beams">Problems with splitting beams<a href="https://foundation.stars-end.net/docs/developer-hub/blog/modular-beams#problems-with-splitting-beams" class="hash-link" aria-label="Direct link to Problems with splitting beams" title="Direct link to Problems with splitting beams" translate="no">​</a></h2>
<p>This section shows common issues you are likely to encounter. It will be explained why they happen and how to best fix them.
Note that you should not encounter any of these issues if you stay with the <code>minimal-jee-beam</code>.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="duplication-of-expanders">Duplication of expanders<a href="https://foundation.stars-end.net/docs/developer-hub/blog/modular-beams#duplication-of-expanders" class="hash-link" aria-label="Direct link to Duplication of expanders" title="Direct link to Duplication of expanders" translate="no">​</a></h3>
<p>When you split an expansion resource, the expanders within now exist in multiple expansion resources (in the old expansion resource,
and the newly split off expansion resource). This means that if both the old expansion resource and the newly split
expansion resource are present, some expanders will be duplicated. This can lead to expander features being injected twice.
A similar thing happens when you rename an expansion resource. In the case of renaming an expansion resource the <a class="" href="https://foundation.stars-end.net/docs/ecosystem/engineering-solutions/expanders/expansion-resource/other-dependencies#replacing-expansion-resources"><code>replace</code>
configuration</a> can be used.
The <code>replace</code> however is not sufficient when splitting an expansion resource. For example, the <code>jee-proxy-logic-expanders</code>
replace the <code>net.democritus:Expanders</code>. This means that only the expanders from the <code>jee-proxy-logic-expanders</code> will be present.
So expansion resources that depend on expanders from <code>net.democritus:Expanders</code> that are not in the <code>jee-proxy-logic-expanders</code>
will throw an error on expansion.</p>
<p>To help solve the issues encountered while splitting beams and modularizing expansion resources, new guardrails were added.
These new guardrails require <code>expanders-maven-plugin:2026.1.0</code>.</p>
<p><strong>New guardrails</strong>:</p>
<ul>
<li class=""><a class="" href="https://foundation.stars-end.net/docs/ecosystem/engineering-solutions/expanders/expansion-resource/other-dependencies#resource-version-constraints">Resource version constraints</a></li>
<li class="">Added <code>modelVersion</code> field to expansionSettings and expansionResource to provide better feedback when the configuration
causes a mismatch.</li>
<li class="">Added resolution tree information to <code>ResolveResourcesResult</code>. Use <code>mvn expanders:dependency-tree</code> to view this information.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="resource-version-constraint-on-expanders940">Resource version constraint on Expanders:9.4.0<a href="https://foundation.stars-end.net/docs/developer-hub/blog/modular-beams#resource-version-constraint-on-expanders940" class="hash-link" aria-label="Direct link to Resource version constraint on Expanders:9.4.0" title="Direct link to Resource version constraint on Expanders:9.4.0" translate="no">​</a></h3>
<p>When replacing the <code>minimal-jee-beam</code> with the new smaller beams, no beam is depending on <code>net.democritus:Expanders</code>
anymore. This causes version conflicts when other expansion resources still require an older version of it.</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">[ERROR] Failed to execute goal net.democritus.maven.plugins:expanders-maven-plugin:2026.1.0:expand (default-cli) on project</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">project-factory: Execution default-cli of goal net.democritus.maven.plugins:expanders-maven-plugin:2026.1.0:expand failed:</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">ExpansionResource dependency resolution failed: 'net.democritus:jee-ear-packaging-expanders::9.5.0' requires</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">at least 'net.democritus:Expanders::9.4.0', but resolved version was '9.2.0'</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">[ERROR] Either upgrade 'net.democritus:Expanders' or remove it from the (transitive) dependencies.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">[ERROR] Dependency Resolution Chains:</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">[ERROR]   - org.normalizedsystems.beam:jee-backend-beam::1.0.0</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">[ERROR]     '-&gt; net.democritus:jee-ear-packaging-expanders::9.5.0</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">[ERROR]   - org.normalizedsystems:project-factory-expanders::1.10.0</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">[ERROR]     '-&gt; net.democritus:Expanders::9.2.0</span><br></span></code></pre></div></div>
<p>The easiest way, <strong>but not the preferred/recommended way</strong> to solve this issue is to add a dependency on Expanders:9.4.0.
Either by updating the Expanders dependency in the project-factory-expanders or by adding Expanders:9.4.0 explicitly in the
expansionSettings. Expanders:9.4.0 has been created as a backwards compatibility measure and so can be used this way. However
as Expanders:9.4.0 still contains all submodules it is still monolithic preventing full modularization. So while this does
solve the issue it is only a temporary solution and should ideally be avoided in favor of the better solution.</p>
<p>Instead of including Expanders:9.4.0 in some way, <strong>it is best to replace the dependency on Expanders completely</strong>. In the case of
this example the project-factory-expanders need to remove the dependency on Expanders and replace it by one or more of
the submodules (e.g. jee-proxy-logic-expanders, jee-ear-packaging-expanders, ...). Only the submodules that are actually
necessary should be used.</p>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionContent_BuS1"><p>The minimal-jee-beam will be discontinued once most expansion resources have removed their dependency on <code>net.democritus.Expanders</code>.
After that only the three newly created beams (jee-backend-beam, struts-api-beam and knockout-frontend-beam) will receive updates.</p></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="leaving-out-struts-or-knockout">Leaving out Struts or Knockout<a href="https://foundation.stars-end.net/docs/developer-hub/blog/modular-beams#leaving-out-struts-or-knockout" class="hash-link" aria-label="Direct link to Leaving out Struts or Knockout" title="Direct link to Leaving out Struts or Knockout" translate="no">​</a></h3>
<p>The new beams allow developers to leave out the knockout-frontend-beam and the struts-api-beam. Doing this on an existing application is in practice quite difficult.</p>
<p>This is because while the beams have been updated to be modular and make use of the symbiotic dependencies. Many other expansion resources
do not. They often still depend on <code>net.democritus:Expanders</code> or don't make it possible to leave out some knockout related expanders. This
makes it impossible to fully remove the struts and knockout technologies until these expansion resources have been updated.</p>
<p>If you do try to leave out a technology or refactor an expansion resource you might encounter the following error.</p>
<div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token class-name">Exception</span><span class="token plain"> in thread </span><span class="token string" style="color:#e3116c">"main"</span><span class="token plain"> </span><span class="token class-name namespace" style="opacity:0.7">net</span><span class="token class-name namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token class-name namespace" style="opacity:0.7">democritus</span><span class="token class-name namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token class-name namespace" style="opacity:0.7">elements</span><span class="token class-name namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token class-name">ElementNotFoundException</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token class-name">Cannot</span><span class="token plain"> find </span><span class="token class-name">Expander</span><span class="token punctuation" style="color:#393A34">(</span><span class="token class-name">ListHtmlExpander</span><span class="token operator" style="color:#393A34">::</span><span class="token function" style="color:#d73a49">net</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">democritus</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">expander</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">knockout</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">projection</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">	at </span><span class="token class-name">ExpanderFeatureTreeToComposite</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">fetchExpander </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">expander</span><span class="token operator" style="color:#393A34">=</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token class-name">Expander</span><span class="token plain"> </span><span class="token class-name">ListHtmlExpander</span><span class="token operator" style="color:#393A34">::</span><span class="token function" style="color:#d73a49">net</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">democritus</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">expander</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">knockout</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">projection</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">	at </span><span class="token class-name">ExpanderFeatureTreeToComposite</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">mapTree </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">tree</span><span class="token operator" style="color:#393A34">=</span><span class="token generics punctuation" style="color:#393A34">&lt;</span><span class="token generics class-name">ExpanderFeature</span><span class="token generics"> </span><span class="token generics punctuation" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">	at </span><span class="token class-name">FeatureTreeToComposite</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">mapExpanderFeatures </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">	at </span><span class="token class-name namespace" style="opacity:0.7">net</span><span class="token class-name namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token class-name namespace" style="opacity:0.7">democritus</span><span class="token class-name namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token class-name namespace" style="opacity:0.7">expansion</span><span class="token class-name namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token class-name">ExpanderFeatureTreeToComposite</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">fetchExpander</span><span class="token punctuation" style="color:#393A34">(</span><span class="token class-name">ExpanderFeatureTreeToComposite</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">java</span><span class="token operator" style="color:#393A34">:</span><span class="token number" style="color:#36acaa">168</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">	at </span><span class="token class-name namespace" style="opacity:0.7">net</span><span class="token class-name namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token class-name namespace" style="opacity:0.7">democritus</span><span class="token class-name namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token class-name namespace" style="opacity:0.7">expansion</span><span class="token class-name namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token class-name">ExpanderFeatureTreeToComposite</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">mapTree</span><span class="token punctuation" style="color:#393A34">(</span><span class="token class-name">ExpanderFeatureTreeToComposite</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">java</span><span class="token operator" style="color:#393A34">:</span><span class="token number" style="color:#36acaa">131</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">	at </span><span class="token class-name namespace" style="opacity:0.7">net</span><span class="token class-name namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token class-name namespace" style="opacity:0.7">democritus</span><span class="token class-name namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token class-name namespace" style="opacity:0.7">expansion</span><span class="token class-name namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token class-name">FeatureTreeToComposite</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">mapExpanderFeatures</span><span class="token punctuation" style="color:#393A34">(</span><span class="token class-name">FeatureTreeToComposite</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">java</span><span class="token operator" style="color:#393A34">:</span><span class="token number" style="color:#36acaa">259</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">	at </span><span class="token class-name namespace" style="opacity:0.7">net</span><span class="token class-name namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token class-name namespace" style="opacity:0.7">democritus</span><span class="token class-name namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token class-name namespace" style="opacity:0.7">expansion</span><span class="token class-name namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token class-name">FeatureTreeToComposite</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">mapTree</span><span class="token punctuation" style="color:#393A34">(</span><span class="token class-name">FeatureTreeToComposite</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">java</span><span class="token operator" style="color:#393A34">:</span><span class="token number" style="color:#36acaa">139</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">	at </span><span class="token class-name namespace" style="opacity:0.7">net</span><span class="token class-name namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token class-name namespace" style="opacity:0.7">democritus</span><span class="token class-name namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token class-name namespace" style="opacity:0.7">expansion</span><span class="token class-name namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token class-name">ExpansionResourceTreeToComposite</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">mapFeatures</span><span class="token punctuation" style="color:#393A34">(</span><span class="token class-name">ExpansionResourceTreeToComposite</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">java</span><span class="token operator" style="color:#393A34">:</span><span class="token number" style="color:#36acaa">336</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">	at </span><span class="token class-name namespace" style="opacity:0.7">net</span><span class="token class-name namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token class-name namespace" style="opacity:0.7">democritus</span><span class="token class-name namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token class-name namespace" style="opacity:0.7">expansion</span><span class="token class-name namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token class-name">ExpansionResourceTreeToComposite</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">mapTree</span><span class="token punctuation" style="color:#393A34">(</span><span class="token class-name">ExpansionResourceTreeToComposite</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">java</span><span class="token operator" style="color:#393A34">:</span><span class="token number" style="color:#36acaa">152</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">	at </span><span class="token class-name namespace" style="opacity:0.7">net</span><span class="token class-name namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token class-name namespace" style="opacity:0.7">democritus</span><span class="token class-name namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token class-name namespace" style="opacity:0.7">model</span><span class="token class-name namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token class-name namespace" style="opacity:0.7">resources</span><span class="token class-name namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token class-name">ExtractResourcesStep</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">convertExpansionResources</span><span class="token punctuation" style="color:#393A34">(</span><span class="token class-name">ExtractResourcesStep</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">java</span><span class="token operator" style="color:#393A34">:</span><span class="token number" style="color:#36acaa">162</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">	at </span><span class="token class-name namespace" style="opacity:0.7">net</span><span class="token class-name namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token class-name namespace" style="opacity:0.7">democritus</span><span class="token class-name namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token class-name namespace" style="opacity:0.7">model</span><span class="token class-name namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token class-name namespace" style="opacity:0.7">resources</span><span class="token class-name namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token class-name">ExtractResourcesStep</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">performStep</span><span class="token punctuation" style="color:#393A34">(</span><span class="token class-name">ExtractResourcesStep</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">java</span><span class="token operator" style="color:#393A34">:</span><span class="token number" style="color:#36acaa">40</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">	at </span><span class="token class-name namespace" style="opacity:0.7">net</span><span class="token class-name namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token class-name namespace" style="opacity:0.7">democritus</span><span class="token class-name namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token class-name namespace" style="opacity:0.7">model</span><span class="token class-name namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token class-name namespace" style="opacity:0.7">resources</span><span class="token class-name namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token class-name">ExtractResourcesStep</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">performStep</span><span class="token punctuation" style="color:#393A34">(</span><span class="token class-name">ExtractResourcesStep</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">java</span><span class="token operator" style="color:#393A34">:</span><span class="token number" style="color:#36acaa">27</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">	at </span><span class="token class-name namespace" style="opacity:0.7">net</span><span class="token class-name namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token class-name namespace" style="opacity:0.7">democritus</span><span class="token class-name namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token class-name namespace" style="opacity:0.7">model</span><span class="token class-name namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token class-name namespace" style="opacity:0.7">common</span><span class="token class-name namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token class-name">ModelLoader</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">performStep</span><span class="token punctuation" style="color:#393A34">(</span><span class="token class-name">ModelLoader</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">java</span><span class="token operator" style="color:#393A34">:</span><span class="token number" style="color:#36acaa">151</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">	at </span><span class="token class-name namespace" style="opacity:0.7">net</span><span class="token class-name namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token class-name namespace" style="opacity:0.7">democritus</span><span class="token class-name namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token class-name namespace" style="opacity:0.7">model</span><span class="token class-name namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token class-name namespace" style="opacity:0.7">common</span><span class="token class-name namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token class-name">ModelLoader</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">loadModel</span><span class="token punctuation" style="color:#393A34">(</span><span class="token class-name">ModelLoader</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">java</span><span class="token operator" style="color:#393A34">:</span><span class="token number" style="color:#36acaa">90</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">	at </span><span class="token class-name namespace" style="opacity:0.7">net</span><span class="token class-name namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token class-name namespace" style="opacity:0.7">democritus</span><span class="token class-name namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token class-name namespace" style="opacity:0.7">model</span><span class="token class-name namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token class-name namespace" style="opacity:0.7">common</span><span class="token class-name namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token class-name">ModelLoader</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">loadModel</span><span class="token punctuation" style="color:#393A34">(</span><span class="token class-name">ModelLoader</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">java</span><span class="token operator" style="color:#393A34">:</span><span class="token number" style="color:#36acaa">54</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">	at </span><span class="token class-name namespace" style="opacity:0.7">net</span><span class="token class-name namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token class-name namespace" style="opacity:0.7">democritus</span><span class="token class-name namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token class-name namespace" style="opacity:0.7">tasks</span><span class="token class-name namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token class-name">ExpandTask</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">execute</span><span class="token punctuation" style="color:#393A34">(</span><span class="token class-name">ExpandTask</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">java</span><span class="token operator" style="color:#393A34">:</span><span class="token number" style="color:#36acaa">43</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">	at </span><span class="token class-name namespace" style="opacity:0.7">net</span><span class="token class-name namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token class-name namespace" style="opacity:0.7">democritus</span><span class="token class-name namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token class-name namespace" style="opacity:0.7">runner</span><span class="token class-name namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token class-name">NsxPrimeRunner</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">executeLocalTask</span><span class="token punctuation" style="color:#393A34">(</span><span class="token class-name">NsxPrimeRunner</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">java</span><span class="token operator" style="color:#393A34">:</span><span class="token number" style="color:#36acaa">70</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">	at </span><span class="token class-name namespace" style="opacity:0.7">net</span><span class="token class-name namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token class-name namespace" style="opacity:0.7">democritus</span><span class="token class-name namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token class-name namespace" style="opacity:0.7">runner</span><span class="token class-name namespace punctuation" style="opacity:0.7;color:#393A34">.</span><span class="token class-name">NsxPrimeRunner</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">main</span><span class="token punctuation" style="color:#393A34">(</span><span class="token class-name">NsxPrimeRunner</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">java</span><span class="token operator" style="color:#393A34">:</span><span class="token number" style="color:#36acaa">21</span><span class="token punctuation" style="color:#393A34">)</span><br></span></code></pre></div></div>
<p>In this case the knockout-frontend-beam was omitted from the expansionSettings. This means that ListHtmlExpander is not
present so the expander feature cannot be injected into it which leads to this error. To solve this, expanders and expander features
that depend on knockout (web-styles) should be isolated into a separate module (expansion resource) with a dependency on web-styles.
This new expansion resource should then be included as a symbiotic dependency on the expansion resource it was isolated from.
This will ensure that the new expansion resource will only be included if web-styles (knockout) is present in the expansion settings.</p>
<p>In this example web-styles is used, but the same can happen with other technologies and expansion resources, hence why it is
important to make small modular expansion resources instead of monolithic expansion resources which combine different technologies
and dependencies.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="how-to-modularize-an-expansion-resource">How to modularize an expansion resource<a href="https://foundation.stars-end.net/docs/developer-hub/blog/modular-beams#how-to-modularize-an-expansion-resource" class="hash-link" aria-label="Direct link to How to modularize an expansion resource" title="Direct link to How to modularize an expansion resource" translate="no">​</a></h2>
<blockquote>
<p><strong>Note:</strong> This modularization step is optional. It is only required for expansion resource maintainers that seek a truly modular application.</p>
</blockquote>
<p>Typically, expansion resources provide an extension to the NSX JEE-stack. They contain expanders and expander features targeting various technologies that are present in the JEE-stack. In order to do this, they depend on <code>net.democritus:Expanders</code>, which covered most of the stack. As explained above, <code>net.democritus:Expanders</code> has now been modularized into distinct expansion resources that group expanders per technology.</p>
<p>To make use of this modularization in an application, all included expansion resources must be modularized as well. Below is a step-by-step guide on how to achieve this, based on an example scenario.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="example-scenario-csv-expanders">Example Scenario: CSV Expanders<a href="https://foundation.stars-end.net/docs/developer-hub/blog/modular-beams#example-scenario-csv-expanders" class="hash-link" aria-label="Direct link to Example Scenario: CSV Expanders" title="Direct link to Example Scenario: CSV Expanders" translate="no">​</a></h3>
<p>Suppose you have an expansion resource adding CSV download functionality. It is called <code>csv-expanders</code>, and it contains an integration with the Knockout frontend, the standard-api, and the Angular frontend.</p>
<!-- -->
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-1-create-modular-expansion-resources">Step 1: Create modular expansion resources<a href="https://foundation.stars-end.net/docs/developer-hub/blog/modular-beams#step-1-create-modular-expansion-resources" class="hash-link" aria-label="Direct link to Step 1: Create modular expansion resources" title="Direct link to Step 1: Create modular expansion resources" translate="no">​</a></h3>
<p>The first step in creating a modular expansion resource is to create a sub-module for each technology you want to split
off, and then move all relevant expanders into them.</p>
<p>Rename your root maven resource from <code>csv-expanders</code> to <code>csv-expanders-project</code> and create a submodule <code>csv-expanders</code>.
This module will act as the entry point for your users (as it did before because we kept the name). Next, create a
submodule for your core expanders and one for each technology you want to split off. Finally, move all the expanders,
features and data resources to the correct module.</p>
<p>You might need to add a dependency from technology specific modules to the core module to inject features or use shared
data resources.</p>
<p>After this step, your bundle module should not contains anything more then a <code>pom.xml</code>.</p>
<!-- -->
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-2-add-symbiotic-dependencies">Step 2: Add symbiotic dependencies<a href="https://foundation.stars-end.net/docs/developer-hub/blog/modular-beams#step-2-add-symbiotic-dependencies" class="hash-link" aria-label="Direct link to Step 2: Add symbiotic dependencies" title="Direct link to Step 2: Add symbiotic dependencies" translate="no">​</a></h3>
<p>In this step, we will add the dynamic behavior. We only want to include technology-specific resources if the underlying
technology is actually included in the application. This can be done using
<a class="" href="https://foundation.stars-end.net/docs/ecosystem/engineering-solutions/expanders/expansion-resource/other-dependencies#symbiotic-dependencies">symbiotic dependencies</a>.</p>
<p>Configure a symbiotic dependency in the bundle module (<code>csv-expanders</code>) for each of the modularized sub-modules. Base
modules, such as <code>csv-core-expanders</code>, should always be present; therefore, their dependencies should <strong>not</strong> be
symbiotic.</p>
<p>With this second step, we have now created an expansion resource that provides a feature with a set of <em>core</em> expanders
that will always be present and optional support for a set of technologies. Using this architecture, expander maintainers
can easily add support for more technologies while giving application builders the choice of what to include in their
application.</p>]]></content:encoded>
            <category>releases</category>
            <category>migration-guide</category>
            <category>beam</category>
            <category>minimal-jee-beam</category>
            <category>jee-backend-beam</category>
            <category>struts-api-beam</category>
            <category>knockout-frontend-beam</category>
        </item>
        <item>
            <title><![CDATA[NSX Metamodels Progress Update]]></title>
            <link>https://foundation.stars-end.net/docs/developer-hub/blog/nsx-metamodels-progress-update</link>
            <guid>https://foundation.stars-end.net/docs/developer-hub/blog/nsx-metamodels-progress-update</guid>
            <pubDate>Tue, 09 Jun 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Introduction]]></description>
            <content:encoded><![CDATA[<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="introduction">Introduction<a href="https://foundation.stars-end.net/docs/developer-hub/blog/nsx-metamodels-progress-update#introduction" class="hash-link" aria-label="Direct link to Introduction" title="Direct link to Introduction" translate="no">​</a></h2>
<p>As can be seen from the number of minor releases, nsx-metamodels is undergoing heavy construction work. This blogpost
aims to clarify the reasoning behind the recent changes, the evolution of the metamodelling practice, and what is still
ahead of us.</p>
<p>Please note that this post is quite the heavy read, but breaking down these complex concepts is necessary to explain
where we are heading. It is primarily intended for those who have been working with metamodels, as well as anyone
considering adopting them, with the objective of being informed of the process.</p>
<p>The most important terminology used in this post:</p>
<ul>
<li class=""><a class="" href="https://foundation.stars-end.net/docs/development/metamodels/programs/">Program</a></li>
<li class=""><a class="" href="https://foundation.stars-end.net/docs/ecosystem/engineering-solutions/expanders/how-it-works/programs-and-modules/#programtypes">ProgramType</a></li>
<li class=""><a class="" href="https://foundation.stars-end.net/docs/development/metamodels/modules/">Module</a></li>
<li class=""><a class="" href="https://foundation.stars-end.net/docs/ecosystem/engineering-solutions/expanders/how-it-works/programs-and-modules/#moduletypes">ModuleType</a></li>
<li class="">M2 model: Refers to a meta-model, ontology or Domain Specific Language, specified in an M3.</li>
<li class="">M1 model: Refers to an actual model, i.e., an instantiation of an M2 meta-model or ontology.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="nsx-metamodels-a-walk-through-the-latest-versions">nsx-metamodels: a walk through the latest versions<a href="https://foundation.stars-end.net/docs/developer-hub/blog/nsx-metamodels-progress-update#nsx-metamodels-a-walk-through-the-latest-versions" class="hash-link" aria-label="Direct link to nsx-metamodels: a walk through the latest versions" title="Direct link to nsx-metamodels: a walk through the latest versions" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="202620---the-dependencies-system">2026.2.0 - the &lt;dependencies&gt; system<a href="https://foundation.stars-end.net/docs/developer-hub/blog/nsx-metamodels-progress-update#202620---the-dependencies-system" class="hash-link" aria-label="Direct link to 2026.2.0 - the <dependencies> system" title="Direct link to 2026.2.0 - the <dependencies> system" translate="no">​</a></h3>
<p>From nsx-metamodels 2025.15.0 until 2026.2.0, support for the <code>&lt;dependencies&gt;</code> system was developed.</p>
<p>Before 2025.15.0, it was not possible to add modules to an already existing ProgramType. If you wanted to add modules
to a Program, you had to create an extra ProgramType to support those modules. A new ProgramType entailed its own
custom <a href="https://foundation.stars-end.net/docs/development/metamodels/programs/#programfactory" target="_blank" rel="noopener noreferrer" class="">ProgramFactory</a>, which
brought a whole new set of issues. The developed <code>&lt;dependencies&gt;</code> system allows you to add modules to a Program and
its existing ProgramType without the significant amount of custom code needed before.</p>
<p>An explanation of this system using the <code>messaging-metamodel</code> example:</p>
<div style="display:flex;gap:20px;justify-content:space-between;flex-wrap:wrap;align-items:center"><div style="flex:1;min-width:300px;text-align:center"><img src="https://foundation.stars-end.net/img/blog/2026-05-06-messaging-metamodel-2.2.0/messaging_metamodel_light.svg" alt="datamodel" class="themedComponent_mlkZ themedComponent--light_NVdE"><img src="https://foundation.stars-end.net/img/blog/2026-05-06-messaging-metamodel-2.2.0/messaging_metamodel_dark.svg" alt="datamodel" class="themedComponent_mlkZ themedComponent--dark_xIcU"><p style="font-style:italic;margin-top:8px;color:var(--ifm-color-emphasis-700)"></p><p>Messaging Ontology</p><p></p></div><div style="flex:1;min-width:300px;text-align:center"><img src="https://foundation.stars-end.net/img/blog/2026-05-06-messaging-metamodel-2.2.0/messaging_jee_metamodel_light.svg" alt="second-image-alt" class="themedComponent_mlkZ themedComponent--light_NVdE"><img src="https://foundation.stars-end.net/img/blog/2026-05-06-messaging-metamodel-2.2.0/messaging_jee_metamodel_dark.svg" alt="second-image-alt" class="themedComponent_mlkZ themedComponent--dark_xIcU"><p style="font-style:italic;margin-top:8px;color:var(--ifm-color-emphasis-700)"></p><p>MessagingJee Ontology</p><p></p></div></div>
<ul>
<li class=""><code>messaging</code> ontology: defines the standalone <code>MessageSpecification</code> module containing topics and schemas.</li>
<li class=""><code>messagingJee</code> ontology: bridges elements and messaging. It defines <code>MessageGroup</code> (containing <code>MessageProducers</code>
and <code>MessageConsumers</code> publishing/subscribing to topics) which has an <strong>extension</strong> reference to <code>elements::Component</code>.
This allows a JEE application to contain multiple message groups.</li>
</ul>
<p>On the M1 level, a jeeApplication (or the specific component) needs to be able to read the target
<code>MessageSpecification</code> to relate its producers/consumers to actual topics and payloads. This is achieved via the
<code>&lt;dependencies&gt;</code> system:</p>
<div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC">messageBus.xml</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">component</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">messageBus</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">type</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">elements::Component</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">version</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">1.0.0</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">version</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">fullName</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">messageBus</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">fullName</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">dependencies</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">dependency</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">to</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">local::specifications/events/model/events.xml</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">to</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">scope</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">expansion</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">scope</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">dependency</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">dependencies</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">component</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></span></code></pre></div></div>
<p>This way, the <code>MessageBus</code> component (a Module) can import the "events" specification and use its topics and schemas.</p>
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>note</div><div class="admonitionContent_BuS1"><p>On the M2 level, there is no direct reference between <code>MessageSpecification</code> and <code>Component</code>. The
<code>&lt;dependencies&gt;</code> system doesn’t mirror the M2 references 1:1. Instead, it defines where module imports are required to
access the information needed to model these M2 references on M1. References are thus defined between elements within
modules, dependencies define imports between modules.</p></div></div>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-was-wrong-with-this-dependencies-system">What was wrong with this &lt;dependencies&gt; system?<a href="https://foundation.stars-end.net/docs/developer-hub/blog/nsx-metamodels-progress-update#what-was-wrong-with-this-dependencies-system" class="hash-link" aria-label="Direct link to What was wrong with this <dependencies> system?" title="Direct link to What was wrong with this <dependencies> system?" translate="no">​</a></h4>
<p>The original <code>&lt;dependencies&gt;</code> system suffered from three main architectural shortcomings:</p>
<ol>
<li class="">Tightly coupled to <code>elements</code>: Since the system was defined inside the elements ontology, creating a truly
standalone metamodel was impossible without importing <code>elements</code>, defeating the goal of modularity.</li>
<li class="">Lack of transparency: the system was deeply buried within the <code>elements</code> core, making it obscure and difficult to
understand. Besides, “dependency” is a highly overused term, lacking semantic meaning here.</li>
<li class="">Inability to depend on program: maybe most critically, the system could not resolve M1 level dependencies pointing
to a <code>Program</code>. While an M2 reference to an <code>ElementClass</code> with a <code>program</code> role was possible, it failed to
interpret on M1. This prevented us from creating a high level connection between two metamodels.</li>
</ol>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="202630---the-standalone-metamodel-profile">2026.3.0 - the Standalone Metamodel profile<a href="https://foundation.stars-end.net/docs/developer-hub/blog/nsx-metamodels-progress-update#202630---the-standalone-metamodel-profile" class="hash-link" aria-label="Direct link to 2026.3.0 - the Standalone Metamodel profile" title="Direct link to 2026.3.0 - the Standalone Metamodel profile" translate="no">​</a></h3>
<p>Enter version 2026.3.0. This was the first round of improvements on the <em>nsx-metamodels</em> to deal with both the issues
encountered before the <code>&lt;dependencies&gt;</code> system, and the issues of the <code>&lt;dependencies&gt;</code> system itself.</p>
<p>When using 2026.3.0, the following matters are changed as a way of improving the concerns:</p>
<ol>
<li class=""><strong>A standalone metamodel profile</strong>: A new profile was added to 2026.3.0: <code>Standalone Metamodel</code>. This profile is
almost identical to <code>Standard Metamodel 3</code>. However, in this profile, the tag <code>#meta.dependencyDeclaration</code> was left
out. This tag added an association reference to <code>elements::Dependency</code> on every Program and Module in the metamodel,
enforcing an ontologyImport to elements. Thanks to this profile, a standalone metamodel is truly standalone.</li>
<li class=""><strong>Programs can now be referenced to, and depended on</strong>: This version allows you to depend on Programs from another
ontology. To do so, you define the program as a ModuleType, and thus import it into your model as a module instead
of a program. This way, you can reference from program &amp; module to Program on M2 level, and actually resolve this
reference on M1 level.</li>
</ol>
<p>An example:</p>
<div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC">moduleTypes.xml</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">dataResource</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">type</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">expansionControl::ModuleType</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">moduleType</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">name</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">NodeBackend</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">name</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">component</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">DoleComs</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">component</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">programType</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">DoleComs::NodeProgram</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">programType</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">expandableElement</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">elements::Application</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">expandableElement</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">moduleFactory</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">net.democritus.elements.ApplicationModuleFactory</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">moduleFactory</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">modelDirectory</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">$source.rootDirectory$/applications/$application.shortName$/model</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">modelDirectory</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">sourceDirectory</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token comment" style="color:#999988;font-style:italic">&lt;!-- NO HARVEST --&gt;</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">sourceDirectory</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">expansionDirectory</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token comment" style="color:#999988;font-style:italic">&lt;!-- NO EXPAND --&gt;</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">expansionDirectory</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">scope</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">reference</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">scope</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">moduleType</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">dataResource</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></span></code></pre></div></div>
<p>Here, we load <code>elements::Application</code> (a Program) as a Module into a different metamodel, with a different Program.
And we can then use it like this:</p>
<div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC">MessagingNodeExample</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">node</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">name</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">MessagingNodeExample</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">name</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">packageName</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">com.dolecoms.node</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">packageName</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">sourceType</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">JAVA</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">sourceType</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">dependencies</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">dependency</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">to</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">local::applications/jeeApp/model/jeeApp.xml</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">to</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">scope</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">reference</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">scope</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">dependency</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">dependencies</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">node</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></span></code></pre></div></div>
<p>However, as you can see in the example, version 2026.3.0 still relies on the <code>&lt;dependencies&gt;</code> system to perform the
imports on M1 level.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="202640---introducing-moduleimports">2026.4.0 - Introducing ModuleImports<a href="https://foundation.stars-end.net/docs/developer-hub/blog/nsx-metamodels-progress-update#202640---introducing-moduleimports" class="hash-link" aria-label="Direct link to 2026.4.0 - Introducing ModuleImports" title="Direct link to 2026.4.0 - Introducing ModuleImports" translate="no">​</a></h3>
<p>In the next version (2026.4.0) we introduce the <code>ModuleImports</code>. This mechanism improves the modularity of metamodels
and the transparency of connecting modules. Module imports are defined on a Program or Module, and specify which
other modules are required to make a Program or Module work. A technical deep dive on the topic can be found <a class="" href="https://foundation.stars-end.net/docs/development/metamodels/imports/">here</a>.</p>
<p>Back to our <code>MessageBus</code> example, this is now changed to:</p>
<div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC">MessageBus.xml</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">component</span><span class="token tag" style="color:#00009f"></span><br></span><span class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">    </span><span class="token tag attr-name" style="color:#00a4db">xmlns</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">https://schemas.normalizedsystems.org/xsd/elements/2025/14/0</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></span><span class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">    </span><span class="token tag attr-name" style="color:#00a4db">moduleId</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">components/messageBus/model/messageBus</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></span><span class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">    </span><span class="token tag attr-name" style="color:#00a4db">type</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">elements::Component</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">import</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">module</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">local::specifications/events/model/events.xml</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">scope</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">expansion</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">name</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">messageBus</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">name</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">version</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">1.0.0</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">version</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">fullName</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">messageBus</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">fullName</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">options</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">configuration.properties</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">options</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">component</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></span></code></pre></div></div>
<p>Every import here specifies the import of a module, to be used in this module (a component called <code>MessageBus</code>).
Here, dependencies are merely interchanged by module imports. However, we can now as well couple programs:</p>
<div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC">MessagingNodeExample.xml</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">node</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">xmlns</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">https://schemas.normalizedsystems.org/xsd/DoleComs/1/2/0-SNAPSHOT</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">import</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">module</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">local::applications/jeeAppExample/model/jeeAppExample.xml</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">scope</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">reference</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">name</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">EmsNode</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">name</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">packageName</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">com.dolecoms.node</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">packageName</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">sourceType</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">JAVA</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">sourceType</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">node</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></span></code></pre></div></div>
<p>The program <code>Node</code> imports the program <code>Application</code>, an import that used to be impossible.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-is-to-be-expected-what-is-the-final-aim-of-these-reworks">What is to be expected? What is the final aim of these reworks?<a href="https://foundation.stars-end.net/docs/developer-hub/blog/nsx-metamodels-progress-update#what-is-to-be-expected-what-is-the-final-aim-of-these-reworks" class="hash-link" aria-label="Direct link to What is to be expected? What is the final aim of these reworks?" title="Direct link to What is to be expected? What is the final aim of these reworks?" translate="no">​</a></h2>
<p>During these efforts to further modularize the metamodels and general project setups, we were able to identify the
root cause of our pain points. Our tooling (µRadiant) thus far assumed a strong coupling between the functional and
structural (or construction) information.</p>
<p>We consider the <strong>functional</strong> view to be the <em>what</em>, the system's operational behavior and functionality, i.e. our
functional model (think data elements, task elements, etc.), whereas the <strong>construction</strong> view embodies the <em>how</em>, the
system's physical structure and implementation (think expansions, layers, technologies, etc.).</p>
<p>The final aim of this effort is to decouple these two and create a truly modular way of project composition. In order
to achieve this, some more sub-objectives need to be built on top of the groundwork we have laid in 2026.3.0 and
2026.4.0:</p>
<ul>
<li class="">Enable model loading without defining ProgramTypes or ModuleTypes, since these are only needed for expansion. With
this, we can reference across modules and programs of various metamodels, and actually instantiate these references
on M1 level without the technical worry of creating moduleTypes.</li>
<li class="">Make Programs and Modules truly standalone blocks. We already don’t need the elements ontologyImport anymore, and
they can already import one another using module imports. However, to establish its usability, µRadiant support
is required.</li>
<li class="">ExpansionSettings should be configurable parallel to the model, not as the root of it. There will be a duality of
architecting the functional model, and designing the project / expansion composition.</li>
<li class="">The core of our framework (prime-core) currently always includes the <code>elements</code> ontology. As we increase
modularization internally we are making the necessary steps to eventually extract elements from our core and provide
it as a separate building block.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-version-should-i-be-using-now">What version should I be using now?<a href="https://foundation.stars-end.net/docs/developer-hub/blog/nsx-metamodels-progress-update#what-version-should-i-be-using-now" class="hash-link" aria-label="Direct link to What version should I be using now?" title="Direct link to What version should I be using now?" translate="no">​</a></h2>
<p>We aim to provide a solid experience for these features, especially in our tools. While it is perfectly fine to use
the latest release, you should know these new features (ModuleImports and importing Programs) are not yet fully
supported in the µRadiant. So we recommend waiting to use these until the total effort is completed. The general
advice would be to stick to the lowest version supporting the features you need.</p>
<p>However, in case these modular constructions are necessary, we ask you to tread carefully with the intermediate
releases. Version 2026.4.0 does provide stable support for these new features, but lacks µRadiant support and
requires some technical deliberation. Technical documentation can be found <a class="" href="https://foundation.stars-end.net/docs/development/metamodels/imports/">here</a>.</p>]]></content:encoded>
            <category>nsx-metamodels</category>
        </item>
        <item>
            <title><![CDATA[Angular Beam 0.2.0 (angular-expanders 7.0.0)]]></title>
            <link>https://foundation.stars-end.net/docs/developer-hub/blog/angular-beam-0.2.0</link>
            <guid>https://foundation.stars-end.net/docs/developer-hub/blog/angular-beam-0.2.0</guid>
            <pubDate>Thu, 09 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Changes and improvements]]></description>
            <content:encoded><![CDATA[<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="changes-and-improvements">Changes and improvements<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-beam-0.2.0#changes-and-improvements" class="hash-link" aria-label="Direct link to Changes and improvements" title="Direct link to Changes and improvements" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="upgrade-to-angular-21-and-angular-material-21">Upgrade to Angular 21 and Angular Material 21<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-beam-0.2.0#upgrade-to-angular-21-and-angular-material-21" class="hash-link" aria-label="Direct link to Upgrade to Angular 21 and Angular Material 21" title="Direct link to Upgrade to Angular 21 and Angular Material 21" translate="no">​</a></h3>
<p>For this release we updated all the code to <code>Angular</code> 21, in order to stay up to date with the releases and best
practices.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="added-dataprojection-support">Added DataProjection support<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-beam-0.2.0#added-dataprojection-support" class="hash-link" aria-label="Direct link to Added DataProjection support" title="Direct link to Added DataProjection support" translate="no">​</a></h3>
<p>A mechanism has been implemented to facilitate fetching of different <code>DataProjections</code> if the used control layer allows
this (std-api). The defaults are set to <code>details</code> for <code>getSingle</code> calls and <code>info</code> for <code>getList</code> calls. This
implementation also allows the use of calculated fields with the <code>info</code> projection now.</p>
<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>tip</div><div class="admonitionContent_BuS1"><p>Double check in your application if the same table columns are still shown. The option <code>cruds.table.hide</code> is now also
taken into account.</p></div></div>
<p>For the moment, the possible projections are set by a <code>ModelLoadingListener</code> that defaults to the <code>info</code>
(<code>$DataConnector$-table.model.ts</code>) and <code>details</code> (<code>$DataConnector$.model.ts</code>) projections. In the future it will be
possible to manually define other projections as well.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="added-finder-support">Added Finder support<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-beam-0.2.0#added-finder-support" class="hash-link" aria-label="Direct link to Added Finder support" title="Direct link to Added Finder support" translate="no">​</a></h3>
<p>We have added a <code>FinderConnector</code> and <code>QueryConnector</code> that implements the new abstract <code>FilterConnector</code>. This
allows to support finders as well as querysearch at the same time (depending on what control layer you are using).</p>
<p>The option <code>hasSearchBar</code> has also been ported. Like in KO this will expand a
searchbar in the header of the list page connected to a finder defined by the specified value of the option.</p>
<p>Related to the addition of a universal <code>Filter</code> feature, previously only one querysearch was supported to be used as a
filter. This has been changed to any amount of querysearches and finders.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="added-authorization-support">Added Authorization support<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-beam-0.2.0#added-authorization-support" class="hash-link" aria-label="Direct link to Added Authorization support" title="Direct link to Added Authorization support" translate="no">​</a></h3>
<p>We have added <code>AuthorizationRights</code> to make certain parts of the application not accessible (used in <code>guards</code>,
<code>directives</code>, <code>services</code>). These rights can be accessed through the <code>ACTION_AUTHORIZATION_SOURCE</code> <code>InjectionToken</code>,
the interface can be provided by a control layer specific implementation, or you can provide your own. Some directives have been added to handle authorization on the most common used components</p>
<ul>
<li class=""><code>ButtonAuthorizationDirective</code></li>
<li class=""><code>TableRowActionMenuAuthorizationDirective</code></li>
</ul>
<p>These directives handle disabling components as well as showing tooltips on why it is disabled. You can look at these as examples when wanting to use the authorization feature somewhere else.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="added-support-for-swapping-out-default-addedit-with-dataoperations">Added support for swapping out default add/edit with DataOperations<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-beam-0.2.0#added-support-for-swapping-out-default-addedit-with-dataoperations" class="hash-link" aria-label="Direct link to Added support for swapping out default add/edit with DataOperations" title="Direct link to Added support for swapping out default add/edit with DataOperations" translate="no">​</a></h3>
<p>Using the following tags you can now conditionally turn of some expanders:</p>
<ul>
<li class=""><code>#angular.data-view.action.add.custom</code>: disable default add page.</li>
<li class=""><code>#angular.data-view.action.edit.custom</code>: disable default edit page.</li>
<li class=""><code>#angular.data-view.action.delete.custom</code>: disable default delete dialog.</li>
<li class=""><code>#angular.data-view.routing.add.disable</code>: disable the add route.</li>
<li class=""><code>#angular.data-view.routing.edit.disable</code>: disable the edit route.</li>
<li class="">Added feature anchors to remaining <code>DataView</code> actions (add, edit, delete, details, list).</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="refactored-use-of-httpclient">Refactored use of HttpClient<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-beam-0.2.0#refactored-use-of-httpclient" class="hash-link" aria-label="Direct link to Refactored use of HttpClient" title="Direct link to Refactored use of HttpClient" translate="no">​</a></h3>
<p>We have added an API specific <code>HttpClient</code>. This allows for easy changing of authentication headers, error handling
etc. per different API implemented. The implicit behavior of the http interceptors is also now removed. To facilitate the removal of the use of interceptors a lot of operator functions that handled the logic of the interceptors have been created.</p>
<ul>
<li class=""><code>handleDataAccessError</code></li>
<li class=""><code>handleAlertError</code></li>
<li class=""><code>handleDataAccessFormError</code></li>
<li class=""><code>notifyDataConnectorSuccessEvent</code></li>
<li class=""><code>notifyDataConnectorFailureEvent</code></li>
</ul>
<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>Important</div><div class="admonitionContent_BuS1"><p>The new client is still based on the angular <code>HttpClient</code> and all functionality of this client can still be used.</p></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="metamodel-changes-and-additions">Metamodel changes and additions<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-beam-0.2.0#metamodel-changes-and-additions" class="hash-link" aria-label="Direct link to Metamodel changes and additions" title="Direct link to Metamodel changes and additions" translate="no">​</a></h3>
<p>Metamodel additions of abstract <code>Connector</code> and <code>View</code>. This allows for easier extension of different types of views
(e.g. <code>ListView</code>, <code>InstanceView</code>, <code>FilterView</code>) or connectors (e.g. <code>DataProjectionConnector</code>, <code>DataOperationConnector</code>,
...).</p>
<img src="https://foundation.stars-end.net/img/blog/2026-01-16-angular-expanders-7.0.0/ang-metamodel_light.svg" alt="datamodel" class="themedComponent_mlkZ themedComponent--light_NVdE"><img src="https://foundation.stars-end.net/img/blog/2026-01-16-angular-expanders-7.0.0/ang-metamodel_dark.svg" alt="datamodel" class="themedComponent_mlkZ themedComponent--dark_xIcU">
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>For more added features check out the changelog</div><div class="admonitionContent_BuS1"><ul>
<li class="">Allowed file type validation</li>
<li class="">Dynamic sidebar support</li>
<li class="">New <code>functions</code> folder in structure</li>
<li class="">Resolved filename encoding issues</li>
<li class="">Added error handling for std-api</li>
</ul></div></div>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="migration-guide">Migration guide<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-beam-0.2.0#migration-guide" class="hash-link" aria-label="Direct link to Migration guide" title="Direct link to Migration guide" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="beam-usage">Beam usage<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-beam-0.2.0#beam-usage" class="hash-link" aria-label="Direct link to Beam usage" title="Direct link to Beam usage" translate="no">​</a></h3>
<p>Instead of individually defining the various angular expansion resources, please use the angular-beam. This is the way angular
should be used. The beams are curated and tested thoroughly.</p>
<p>When using angular in combination with the <strong>standard-api</strong> as the control layer you should use the following.</p>
<div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC">expansionSettings.xml</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">expansionResources</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  ...</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">expansionResource</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">org.normalizedsystems.beam:angular-beam</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">version</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">0.2.0</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">expansionResource</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">net.democritus.angular.stdapi:angular-stdapi-expanders</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">version</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">3.6.2</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">expansionResource</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">org.normalizedsystems.beam:standard-api-beam</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">version</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">1.1.0</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">expansionResources</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></span></code></pre></div></div>
<p>When using angular in combination with the <strong>service-api</strong> as the control layer you should use the following.</p>
<div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC">expansionSettings.xml</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">expansionResources</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  ...</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">expansionResource</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">org.normalizedsystems.beam:angular-beam</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">version</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">0.2.0</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">expansionResource</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">net.democritus.angular.svcapi:angular-svcapi-expanders</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">version</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">3.6.1</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">expansionResource</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">org.normalizedsystems.beam:service-api-beam</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">version</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">1.2.0</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">expansionResources</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></span></code></pre></div></div>
<div class="theme-admonition theme-admonition-warning admonition_xJq3 alert alert--warning"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></span>Beam composition changed</div><div class="admonitionContent_BuS1"><p>In contrast to version <code>0.1.0</code> of the <code>angular-beam</code>. The <code>angular-stdapi-expanders</code> and <code>angular-svcapi-expanders</code> need to be added separately.
This is done to help dependency resolution only resolve the necessary expansion resources.</p></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="upgrade-to-angular-21">Upgrade to Angular 21<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-beam-0.2.0#upgrade-to-angular-21" class="hash-link" aria-label="Direct link to Upgrade to Angular 21" title="Direct link to Upgrade to Angular 21" translate="no">​</a></h3>
<p>Normally you shouldn't have any issues, you can look at <a href="https://angular.dev/update-guide?v=19.0-21.0&amp;l=3" target="_blank" rel="noopener noreferrer" class="">the migration guide</a> to see what changes in custom code need to be done.</p>
<p>Some notable changes are:</p>
<ul>
<li class="">We removed <code>@angular/animations</code>, this is being <a href="https://angular.dev/guide/animations/migration" target="_blank" rel="noopener noreferrer" class="">deprecated</a>.
However, if necessary it can be re-added as custom code in the <code>package.json5</code> file and provided in the <code>app.config.ts</code>.</li>
<li class=""><a href="https://angular.dev/reference/migrations/control-flow" target="_blank" rel="noopener noreferrer" class="">Control flow syntax migration</a>, Angular is planning
on removing the <code>ngIf</code>, <code>ngFor</code>, ... directives in Angular 22. They deprecated them a while ago, so it is
best to start switching to the control flow syntax.</li>
<li class="">Lastly, we also upgraded to version <code>17.0.0</code> of <code>ngx-translate</code>. They deprecated some methodes and the direct
calling of variables in their services. You can look at their <a href="https://ngx-translate.org/getting-started/migration-guide/" target="_blank" rel="noopener noreferrer" class="">migration guide</a> for the preferred changes.</li>
</ul>
<div class="theme-admonition theme-admonition-warning admonition_xJq3 alert alert--warning"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></span>Stricter type inference</div><div class="admonitionContent_BuS1"><p>Type checking in templates have become stricter, and you will potentially have to explicitly define some types in
your TypeScript files.</p></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="jenkins-pipeline">Jenkins pipeline<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-beam-0.2.0#jenkins-pipeline" class="hash-link" aria-label="Direct link to Jenkins pipeline" title="Direct link to Jenkins pipeline" translate="no">​</a></h3>
<div class="theme-admonition theme-admonition-danger admonition_xJq3 alert alert--danger"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"></path></svg></span>.yarnrc.yml</div><div class="admonitionContent_BuS1"><p>Some projects had issues on jenkins after migrating. This was due to the fact that <code>.</code> files are not always
copied over. Please make sure that in the folder you do <code>yarn build</code> the <code>.yarnrc.yml</code> file is present. Possibly
change how you copy the front-end project from the expansion folder, e.g. <code>sh "cp -r expansions/${FRONTEND_NAME}-angular/* docker/frontend/deploy"</code>
changed to <code>sh "cp -r expansions/${FRONTEND_NAME}-angular/. docker/frontend/deploy"</code></p></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="upgrade-dependencies">Upgrade dependencies<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-beam-0.2.0#upgrade-dependencies" class="hash-link" aria-label="Direct link to Upgrade dependencies" title="Direct link to Upgrade dependencies" translate="no">​</a></h3>
<p><code>net.democritus:querysearch-expanders::3.5.1+</code> is required.
Use  any of the following or make sure the minimum required querysearch-expanders version is provided elsewhere.</p>
<ul>
<li class=""><code>org.normalizedsystems.beam:service-api-beam::1.2.0+</code></li>
<li class=""><code>org.normalizedsystems.beam:standard-api-beam::1.1.0+</code></li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="metamodel-changes">Metamodel changes<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-beam-0.2.0#metamodel-changes" class="hash-link" aria-label="Direct link to Metamodel changes" title="Direct link to Metamodel changes" translate="no">​</a></h3>
<div class="theme-admonition theme-admonition-danger admonition_xJq3 alert alert--danger"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"></path></svg></span>Metamodel changed</div><div class="admonitionContent_BuS1"><p>Due to the changes in the angular metamodel, you should update any expansion resources which use the angular-expanders to avoid issues.
Update the angular-expanders dependency to at least <code>7.x</code> and perform any changes necessary to make the expanders work again.
One possible issue is that expander features won't expand anymore because the target element of the expander has changed.</p></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="added-dataprojection-support-1">Added DataProjection support<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-beam-0.2.0#added-dataprojection-support-1" class="hash-link" aria-label="Direct link to Added DataProjection support" title="Direct link to Added DataProjection support" translate="no">​</a></h3>
<p>A <code>ListView</code> element is automatically linked to a <code>DataProjectionConnector</code> for the <code>info</code> projection. If you want
to change this back to the previous default of <code>details</code>, you can do this by using the option <code>angular.legacy.table.useModelProjection</code>.
This option will stay in place until we move away for automatically defining the model with
<code>ModelLoadingListeners</code> and start defining the model explicitly.</p>
<div class="undefined anchor option-type-anchor" id="option-angularlegacytableusemodelprojection"><div class="card option-type-card"><div class="option-type-card-header"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-option" aria-hidden="true"><path d="M3 3h6l6 18h6"></path><path d="M14 3h7"></path></svg>Option<a class="hash-link" href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-beam-0.2.0#option-angularlegacytableusemodelprojection" title="Direct link to option"></a></div><div class="card__header"><span class="option-type"><span class="option-name">angular.legacy.table.useModelProjection</span> <code class="badge badge--primary">DataConnector</code><code class="badge badge--primary">FeatureModule</code><code class="badge badge--primary">AngularApp</code><span class="badge badge--secondary">Cascading</span></span></div><div class="card__body"><p>Instead of the new info projection, use the previously used details projection.</p><div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">options</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line theme-code-block-highlighted-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">angular.legacy.table.useModelProjection</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">options</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></span></code></pre></div></div></div></div></div>
<p>While upgrading it is possible that the newly used <code>info</code> projection does not contain some of the fields being
called in custom code. You can either (1) add these fields to the info projection or (2) go back to the <code>details</code>
projection. Often times you can rely on duck typing to handle it correctly, e.g. when needing only the id.</p>
<p>The option <code>angular.isTableColumn</code> has been removed together with the transmuter adding this to all the fields having
the <code>isInfoField</code> attribute. The option is not necessary anymore because this is now handled by the info projection. A
new transmuter has been added that removes this option everywhere and sets the<code>isInfoField</code> attribute to true.</p>
<div class="undefined anchor transmutation-anchor" id="transmutation-transmuteistablecolumnoption"><div class="card transmutation-card"><div class="transmutation-card-header"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-list-checks card-icon" aria-hidden="true"><path d="M13 5h8"></path><path d="M13 12h8"></path><path d="M13 19h8"></path><path d="m3 17 2 2 4-4"></path><path d="m3 7 2 2 4-4"></path></svg>Transmutation<a class="hash-link" href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-beam-0.2.0#transmutation-transmuteistablecolumnoption" title="Direct link to transmutation"></a></div><div class="card__header"><span class="transmutation"><span class="transmutation-name">TransmuteIsTableColumnOption</span><code class="badge badge--primary">Application</code></span></div><div class="card__body"><p>Refactors all <code>angular.isTableColumn</code> options to info projection. If the option is not present isInfoField will be set false.</p></div></div></div>
<hr>
<p>The <code>DataAccess</code> interface has undergone some changes. The defaults allow for no breaking changes in the custom code.
However, the <code>%dataConnector%ListModel</code> has been changed with a generic <code>PaginatedList</code> model from the ns-core
runtime library. The expander for this model has also been removed.</p>
<div class="row"><div class="col col--6"><div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC"><span><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-code" aria-hidden="true"><path d="m16 18 6-6-6-6"></path><path d="m8 6-6 6 6 6"></path></svg><span class="padding-horiz--sm">Before</span></span></div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">getSingle</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> id </span><span class="token punctuation" style="color:#393A34">}</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> id</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token builtin">string</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> Observable</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">%</span><span class="token plain">dataConnector</span><span class="token operator" style="color:#393A34">%</span><span class="token plain">Model</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">getList</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> segmentParameters </span><span class="token punctuation" style="color:#393A34">}</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> segmentParameters</span><span class="token operator" style="color:#393A34">?</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">%</span><span class="token plain">dataConnector</span><span class="token operator" style="color:#393A34">%</span><span class="token plain">SegmentParameters </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> Observable</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">%</span><span class="token plain">dataConnector</span><span class="token operator" style="color:#393A34">%</span><span class="token plain">ListModel</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div></div><div class="col col--6"><div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC"><span><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-code" aria-hidden="true"><path d="m16 18 6-6-6-6"></path><path d="m8 6-6 6 6 6"></path></svg><span class="padding-horiz--sm">After</span></span></div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token generic-function function" style="color:#d73a49">getSingle</span><span class="token generic-function generic class-name operator" style="color:#393A34">&lt;</span><span class="token generic-function generic class-name constant" style="color:#36acaa">T</span><span class="token generic-function generic class-name"> </span><span class="token generic-function generic class-name keyword" style="color:#00009f">extends</span><span class="token generic-function generic class-name"> </span><span class="token generic-function generic class-name keyword" style="color:#00009f">keyof</span><span class="token generic-function generic class-name"> </span><span class="token generic-function generic class-name operator" style="color:#393A34">%</span><span class="token generic-function generic class-name">dataConnector</span><span class="token generic-function generic class-name operator" style="color:#393A34">%</span><span class="token generic-function generic class-name">Projection </span><span class="token generic-function generic class-name operator" style="color:#393A34">=</span><span class="token generic-function generic class-name"> </span><span class="token generic-function generic class-name string" style="color:#e3116c">'%dataConnector%'</span><span class="token generic-function generic class-name operator" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> id</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> projection </span><span class="token punctuation" style="color:#393A34">}</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> id</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token builtin">string</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> projection</span><span class="token operator" style="color:#393A34">?</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token constant" style="color:#36acaa">T</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> Observable</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">%</span><span class="token plain">dataConnector</span><span class="token operator" style="color:#393A34">%</span><span class="token plain">Projection</span><span class="token punctuation" style="color:#393A34">[</span><span class="token constant" style="color:#36acaa">T</span><span class="token punctuation" style="color:#393A34">]</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token generic-function function" style="color:#d73a49">getList</span><span class="token generic-function generic class-name operator" style="color:#393A34">&lt;</span><span class="token generic-function generic class-name constant" style="color:#36acaa">T</span><span class="token generic-function generic class-name"> </span><span class="token generic-function generic class-name keyword" style="color:#00009f">extends</span><span class="token generic-function generic class-name"> </span><span class="token generic-function generic class-name keyword" style="color:#00009f">keyof</span><span class="token generic-function generic class-name"> </span><span class="token generic-function generic class-name operator" style="color:#393A34">%</span><span class="token generic-function generic class-name">dataConnector</span><span class="token generic-function generic class-name operator" style="color:#393A34">%</span><span class="token generic-function generic class-name">Projection </span><span class="token generic-function generic class-name operator" style="color:#393A34">=</span><span class="token generic-function generic class-name"> </span><span class="token generic-function generic class-name string" style="color:#e3116c">'%dataConnector%'</span><span class="token generic-function generic class-name operator" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> segmentParameters</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> projection </span><span class="token punctuation" style="color:#393A34">}</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> segmentParameters</span><span class="token operator" style="color:#393A34">?</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">%</span><span class="token plain">dataConnector</span><span class="token operator" style="color:#393A34">%</span><span class="token plain">SegmentParameters</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> projection</span><span class="token operator" style="color:#393A34">?</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token constant" style="color:#36acaa">T</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> Observable</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">PaginatedList</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token operator" style="color:#393A34">%</span><span class="token plain">dataConnector</span><span class="token operator" style="color:#393A34">%</span><span class="token plain">Projection</span><span class="token punctuation" style="color:#393A34">[</span><span class="token constant" style="color:#36acaa">T</span><span class="token punctuation" style="color:#393A34">]</span><span class="token operator" style="color:#393A34">&gt;&gt;</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div></div></div>
<p>To make the <code>DataSource</code> default to a certain projection, the <code>InjectionToken</code> for the <code>DataSource</code> needed to
get a type. For this reason we moved the <code>DataView</code> related tokens to a different file <code>DataView-view.tokens</code>.
Namely, a file expanded by <code>DataView</code> instead of <code>DataConnector</code>. Custom imports using these tokens will need to be updated.
If you don't want change the imports in custom code right away, you can get the tokens back in the original place by
using the option <code>angular.legacy.tokens</code>.</p>
<p>When you have a custom token defined, you should add the type now. This is necessary otherwise the <code>DataSource</code> cannot
be used with multiple projections.</p>
<div class="undefined anchor option-type-anchor" id="option-angularlegacytokens"><div class="card option-type-card"><div class="option-type-card-header"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-option" aria-hidden="true"><path d="M3 3h6l6 18h6"></path><path d="M14 3h7"></path></svg>Option<a class="hash-link" href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-beam-0.2.0#option-angularlegacytokens" title="Direct link to option"></a></div><div class="card__header"><span class="option-type"><span class="option-name">angular.legacy.tokens</span> <code class="badge badge--primary">DataConnector</code><code class="badge badge--primary">FeatureModule</code><code class="badge badge--primary">AngularApp</code><span class="badge badge--secondary">Cascading</span></span></div><div class="card__body"><p>Make the moved 'view.tokens' available in original '.tokens' file.</p><div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">options</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line theme-code-block-highlighted-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">angular.legacy.tokens</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">options</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></span></code></pre></div></div></div></div></div>
<p>Lastly, when using a <code>*-data-access.service</code> directly, the defaults of the used projection is not respected. This
means that custom code will break, because now you need to define a projection. However, when using the <strong>correct</strong>
<code>*_DATA_ACCESS</code> <code>InjectionToken</code> this is handled correctly. This will also allow to easily swap implementations
later on. When running into this issue it is recommended to migrate to using the injection token instead of using the service
directly.</p>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>Future best practice</div><div class="admonitionContent_BuS1"><p>We have noticed that having a separate tokens file is actually not necessary. We will start combining the
<code>InjectionToken</code> with the interface in the same file.</p></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="added-finder-support-1">Added Finder support<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-beam-0.2.0#added-finder-support-1" class="hash-link" aria-label="Direct link to Added Finder support" title="Direct link to Added Finder support" translate="no">​</a></h3>
<p>To make the finders work together with querysearch, some things had to change.</p>
<ol>
<li class="">The previous standard querysearch model (now filter) has been changed from an interface to a class. Any places in the code where object instancing is used to create a filter object needs to be changed to a new class instance using:</li>
</ol>
<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> filter </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name">FooBarFilter</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  filter</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">foo </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">barService</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">getBarValue</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>or wrapping the object in the <code>fromObject()</code> function expanded in the new class:</p>
<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> filter </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> FooBarFilter</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">fromObject</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">obj</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">foo</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">barService</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">getBarValue</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<ol start="2">
<li class="">The token injecting the InfiniteDataSource used for populating the dropdowns in the forms has been changed from <code>&lt;...&gt;FILTER_DATA_SOURCE</code> to <code>&lt;...&gt;FINDER_FILTER_DATA_SOURCE</code> and <code>&lt;...&gt;QUERY_FILTER_DATA_SOURCE</code> for finders and queryssearches respectively.</li>
<li class="">When upgrading from a previous version your previously defined querysearch model file used will have been renamed from <code>&lt;...&gt;Filters</code> to <code>&lt;...&gt;Filter</code> resulting in possible breaking code in custom anchors. You can safely assume that changing <code>&lt;...&gt;Filters</code> to <code>&lt;...&gt;Filter</code> wil fix most issues in custom code and custom imports.</li>
<li class="">Some imports could have been removed/added from the expanded files resulting in missing/duplicate imports.</li>
<li class="">It could be possible that when a DataChild is defined in the model, and you do not have a valid field in the filter of the child pointing to the parent that code will be expanded that will not compile. If you run into this problem, add a field to your filter pointing to the parent.</li>
<li class="">The <code>FilterOptions</code> have been moved from being calculated in their <code>FilterOptionResolver</code> to being calculated directly in their respective <code>FilterFormComponent(s)</code>. If you have any custom code on the list page interacting with <code>filterOptions</code> this will have to be moved to the <code>FilterFormComponent(s)</code></li>
</ol>
<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>Legacy view</div><div class="admonitionContent_BuS1"><p>We understand that some project do not want to immediately change from how filtering previously looked. For this we
added a <code>#angular.filters.legacy</code> root tag. When this is added in your profile, it will attempt to keep the code and
visuals as close as possible to the previous querysearch filtering implementation. However, <strong>the new classes and names for the filter models will still be used</strong> resulting in possible breaking changes as explained above.</p></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="refactored-use-of-httpclient-1">Refactored use of HttpClient<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-beam-0.2.0#refactored-use-of-httpclient-1" class="hash-link" aria-label="Direct link to Refactored use of HttpClient" title="Direct link to Refactored use of HttpClient" translate="no">​</a></h3>
<p>The use of angular interceptors have been removed and moved to the specific clients. When you use the generic angular <code>httpClient</code> the following will no longer occur</p>
<ol>
<li class="">Error mapping (check if error from svc-api and map it to internal error structure)</li>
<li class="">Error handling (directly act on an error, e.g. 404)</li>
<li class="">File download error handling</li>
<li class="">Authentication header addition</li>
</ol>
<p>Either change to the new expanded api specific <code>HttpClient</code> (preferred) or add these interceptors again as custom code while awaiting the refactor.</p>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>Migration Example: Handling errors explicitly</div><div class="admonitionContent_BuS1"><div class="row"><div class="col col--6"><div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC"><span><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-code" aria-hidden="true"><path d="m16 18 6-6-6-6"></path><path d="m8 6-6 6 6 6"></path></svg><span class="padding-horiz--sm">Before</span></span></div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">httpClient</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">.</span><span class="token generic-function function" style="color:#d73a49">get</span><span class="token generic-function generic class-name operator" style="color:#393A34">&lt;</span><span class="token generic-function generic class-name constant" style="color:#36acaa">X</span><span class="token generic-function generic class-name operator" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">url</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> url</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">pipe</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token function" style="color:#d73a49">map</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">document</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">xModelMapper</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">map</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">document</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div></div><div class="col col--6"><div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC"><span><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-code" aria-hidden="true"><path d="m16 18 6-6-6-6"></path><path d="m8 6-6 6 6 6"></path></svg><span class="padding-horiz--sm">After</span></span></div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">httpClient</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">.</span><span class="token generic-function function" style="color:#d73a49">get</span><span class="token generic-function generic class-name operator" style="color:#393A34">&lt;</span><span class="token generic-function generic class-name constant" style="color:#36acaa">X</span><span class="token generic-function generic class-name operator" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">url</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> url</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">pipe</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token function" style="color:#d73a49">map</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">document</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">xProjectionMapper</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">map</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">document</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token function" style="color:#d73a49">handleDataAccessError</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> injector</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">injector </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token function" style="color:#d73a49">handleAlertError</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> injector</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">injector </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div></div></div></div></div>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>Migration Example: New interface declaration</div><div class="admonitionContent_BuS1"><div class="row"><div class="col col--6"><div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC"><span><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-code" aria-hidden="true"><path d="m16 18 6-6-6-6"></path><path d="m8 6-6 6 6 6"></path></svg><span class="padding-horiz--sm">Before</span></span></div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">get</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">url</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">headers</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> headers</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> params</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> params</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><br></span></code></pre></div></div></div><div class="col col--6"><div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC"><span><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-code" aria-hidden="true"><path d="m16 18 6-6-6-6"></path><path d="m8 6-6 6 6 6"></path></svg><span class="padding-horiz--sm">After</span></span></div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">get</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">url</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> url</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> options</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> options</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><br></span></code></pre></div></div></div></div></div></div>
<p>Some imports are no longer default expanded. These should be added custom if needed in <code>*-data-access.service.ts</code>.</p>
<ul>
<li class=""><code>catchError</code></li>
<li class=""><code>AlertErrorModel</code></li>
<li class=""><code>throwError</code></li>
<li class=""><code>EMPTY</code></li>
<li class=""><code>tap</code></li>
<li class=""><code>filter</code></li>
</ul>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>Migration Example: Using new HttpClient methods</div><div class="admonitionContent_BuS1"><div class="row"><div class="col col--6"><div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC"><span><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-code" aria-hidden="true"><path d="m16 18 6-6-6-6"></path><path d="m8 6-6 6 6 6"></path></svg><span class="padding-horiz--sm">Before</span></span></div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">httpClient</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">get</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">url</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    params</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> params</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    observe</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'response'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    responseType</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'blob'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain">  </span><br></span></code></pre></div></div></div><div class="col col--6"><div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC"><span><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-code" aria-hidden="true"><path d="m16 18 6-6-6-6"></path><path d="m8 6-6 6 6 6"></path></svg><span class="padding-horiz--sm">After</span></span></div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">httpClient</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">downloadFile</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    url</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    options</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">pipe</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token function" style="color:#d73a49">filter</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">response </span><span class="token operator" style="color:#393A34">=&gt;</span><span class="token plain"> response</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">type </span><span class="token operator" style="color:#393A34">==</span><span class="token plain"> HttpEventType</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Response</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token function" style="color:#d73a49">handleDataAccessError</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> injector</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">injector </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token function" style="color:#d73a49">handleAlertError</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> injector</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">injector </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div></div></div></div></div>
<div class="theme-admonition theme-admonition-warning admonition_xJq3 alert alert--warning"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></span>response types</div><div class="admonitionContent_BuS1"><p>The new expanded api specific <code>HttpClient</code> always has a responseType <code>'json'</code>. This is done for simplicity and it covers most use cases.
For a file download which has the responseType <code>'blob'</code> a separate method <code>downloadFile</code> is included. However if you need other response types,
you should add your own custom methods to the expanded api specific <code>HttpClient</code>.</p></div></div>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>Migration Example: Using new Event Operators</div><div class="admonitionContent_BuS1"><div class="row"><div class="col col--6"><div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC"><span><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-code" aria-hidden="true"><path d="m16 18 6-6-6-6"></path><path d="m8 6-6 6 6 6"></path></svg><span class="padding-horiz--sm">Before</span></span></div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">create</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> model </span><span class="token punctuation" style="color:#393A34">}</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> model</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> DemoElementModel </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> Observable</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> id</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token builtin">string</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">let</span><span class="token plain"> headers </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name">HttpHeaders</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">let</span><span class="token plain"> data </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">demoElementCreateDocumentMapper</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">map</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> model </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// anchor:custom-create:start</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// anchor:custom-create:end</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">httpClient</span><span class="token punctuation" style="color:#393A34">.</span><span class="token generic-function function" style="color:#d73a49">post</span><span class="token generic-function generic class-name operator" style="color:#393A34">&lt;</span><span class="token generic-function generic class-name punctuation" style="color:#393A34">{</span><span class="token generic-function generic class-name"> id</span><span class="token generic-function generic class-name operator" style="color:#393A34">:</span><span class="token generic-function generic class-name"> </span><span class="token generic-function generic class-name builtin">string</span><span class="token generic-function generic class-name"> </span><span class="token generic-function generic class-name punctuation" style="color:#393A34">}</span><span class="token generic-function generic class-name operator" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">url</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> data</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">headers</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> headers</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">pipe</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token function" style="color:#d73a49">map</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">response </span><span class="token operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">id</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> response</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">id</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token function" style="color:#d73a49">tap</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">response </span><span class="token operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">demoElementEventService</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">updateEvents</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        event</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          objectIdentifier</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> response</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">id</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          type</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'create'</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token function" style="color:#d73a49">catchError</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">error </span><span class="token operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">demoElementEventService</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">updateEvents</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        event</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          objectIdentifier</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">''</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          type</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'create-failed'</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token comment" style="color:#999988;font-style:italic">// anchor:custom-create-error:start</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token comment" style="color:#999988;font-style:italic">// anchor:custom-create-error:end</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">error </span><span class="token keyword" style="color:#00009f">instanceof</span><span class="token plain"> </span><span class="token class-name">AlertErrorModel</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">alertErrorHandler</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">handleError</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">error</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> error</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> </span><span class="token constant" style="color:#36acaa">EMPTY</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">throwError</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=&gt;</span><span class="token plain"> error</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><br></span></code></pre></div></div></div><div class="col col--6"><div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC"><span><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-code" aria-hidden="true"><path d="m16 18 6-6-6-6"></path><path d="m8 6-6 6 6 6"></path></svg><span class="padding-horiz--sm">After</span></span></div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">create</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> model </span><span class="token punctuation" style="color:#393A34">}</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> model</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> DemoElementModel </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> Observable</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> id</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token builtin">string</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> url </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'/v1/demoelements'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> options</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> HttpClientOptions </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">let</span><span class="token plain"> data </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">demoElementCreateDocumentMapper</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">map</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> model </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// anchor:custom-create:start</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// anchor:custom-create:end</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">httpClient</span><span class="token punctuation" style="color:#393A34">.</span><span class="token generic-function function" style="color:#d73a49">post</span><span class="token generic-function generic class-name operator" style="color:#393A34">&lt;</span><span class="token generic-function generic class-name punctuation" style="color:#393A34">{</span><span class="token generic-function generic class-name"> id</span><span class="token generic-function generic class-name operator" style="color:#393A34">:</span><span class="token generic-function generic class-name"> </span><span class="token generic-function generic class-name builtin">string</span><span class="token generic-function generic class-name"> </span><span class="token generic-function generic class-name punctuation" style="color:#393A34">}</span><span class="token generic-function generic class-name operator" style="color:#393A34">&gt;</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    url</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> url</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    body</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> data</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    options</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> options</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">pipe</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token function" style="color:#d73a49">map</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">response </span><span class="token operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">id</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> response</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">id</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic">// @anchor:create-operators:start</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token function" style="color:#d73a49">notifyDemoElementSuccessEvent</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      injector</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">injector</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      event</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        type</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'create'</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token function" style="color:#d73a49">notifyDemoElementFailureEvent</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      injector</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">injector</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      event</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        type</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'create-failed'</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token function" style="color:#d73a49">handleDataAccessFormError</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> injector</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">injector </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token function" style="color:#d73a49">handleDataAccessError</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> injector</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">injector </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token function" style="color:#d73a49">handleAlertError</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> injector</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">injector </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic">// @anchor:create-operators:end</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div></div></div></div></div>
<p>It is possible to add your own operator functions to the http-client by default. Define your own operator functions in
the <code>anchor:custom-methods</code> of the http-client service or preferably in a separate class in the <code>functions</code> directory.
Then register the operator function in the <code>anchor:custom-default-operators</code> within the <code>#getDefaultOperators</code> method.</p>
<ul>
<li class="">
<p>Custom error anchors have been removed from data access services. Use the existing error mapping classes or add an operator
function to the http-client.</p>
</li>
<li class="">
<p>Removed <code>error-mapper.interceptor.ts</code> and <code>error.interceptor.ts</code>. Use the existing error mapping classes or add an operator
function to the http-client.</p>
</li>
</ul>
<hr>
<p>A breaking change has been introduced in the <code>event.model.ts</code> interface where the <code>objectIdentifier</code> attribute has
been made optional. This potentially results in some custom code changes to handle the possible <code>undefined</code> nature.</p>
<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>Modeling endpoints</div><div class="admonitionContent_BuS1"><p>Try to use <code>DataOperations</code> instead of custom endpoint calls. This will make migration in the future a lot easier,
and you will have all the endpoints defined in your model.</p></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="changed-default-filtering-in-dropdowns">Changed default filtering in dropdowns<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-beam-0.2.0#changed-default-filtering-in-dropdowns" class="hash-link" aria-label="Direct link to Changed default filtering in dropdowns" title="Direct link to Changed default filtering in dropdowns" translate="no">​</a></h3>
<p>Dropdowns (nsc-select components) are no longer searchable by default. You have to add the option
<code>angular.defaultQueryFilter</code> to a QuerySearch to make a data element searchable in the dropdown. This change allows you
to choose the filter that is used for filtering the results in the dropdown.</p>
<p>There is a transmuter which will add this option for you to all querysearches, this will make all the dropdowns work as
before. However just as before, if the filter is not implemented the filtering will not work. It is therefore recommended
to carefully inspect the changes made by the transmuter and make changes accordingly.</p>
<div class="undefined anchor option-type-anchor" id="option-angulardefaultqueryfilter"><div class="card option-type-card"><div class="option-type-card-header"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-option" aria-hidden="true"><path d="M3 3h6l6 18h6"></path><path d="M14 3h7"></path></svg>Option<a class="hash-link" href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-beam-0.2.0#option-angulardefaultqueryfilter" title="Direct link to option"></a></div><div class="card__header"><span class="option-type"><span class="option-name">angular.defaultQueryFilter</span> <code class="badge badge--primary">QuerySearch</code></span></div><div class="card__body"><p>Makes it so that the dropdowns (linkFields) in the edit/add and filter forms are searchable. Value is the string field name on which should be filtered.</p><div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">options</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line theme-code-block-highlighted-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">angular.defaultQueryFilter</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">options</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></span></code></pre></div></div></div></div></div>
<div class="undefined anchor transmutation-anchor" id="transmutation-upgradedefaultfilterstov7"><div class="card transmutation-card"><div class="transmutation-card-header"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-list-checks card-icon" aria-hidden="true"><path d="M13 5h8"></path><path d="M13 12h8"></path><path d="M13 19h8"></path><path d="m3 17 2 2 4-4"></path><path d="m3 7 2 2 4-4"></path></svg>Transmutation<a class="hash-link" href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-beam-0.2.0#transmutation-upgradedefaultfilterstov7" title="Direct link to transmutation"></a></div><div class="card__header"><span class="transmutation"><span class="transmutation-name">UpgradeDefaultFiltersToV7</span><code class="badge badge--primary">Application</code></span></div><div class="card__body"><p>This transmuter helps you get the same default filtering behavior for all QS as before release 7.x (angular-expanders)</p></div></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="module-metamodel-absorbed-in-prime-core">Module-metamodel absorbed in prime-core<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-beam-0.2.0#module-metamodel-absorbed-in-prime-core" class="hash-link" aria-label="Direct link to Module-metamodel absorbed in prime-core" title="Direct link to Module-metamodel absorbed in prime-core" translate="no">​</a></h3>
<p>If your project started using the <code>module-metamodel</code> to declare dependencies between specific <code>FeatureModules</code>, you
should refactor how these dependencies are defined. The <code>module-metamodel</code> has been absorbed in <code>prime-core</code> and
received a new way of declaration.</p>
<ol>
<li class="">First of, you can remove the <code>angularAppModules.xml</code> file.</li>
<li class="">In your <code>angular-app.xml</code> you should change the <code>&lt;featureModules&gt;</code> attribute with <code>&lt;dependencies&gt;</code>.</li>
<li class="">Add a type to your <code>featureModule.xml</code>.</li>
</ol>
<div class="row"><div class="col col--6"><div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC"><span><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-code" aria-hidden="true"><path d="m16 18 6-6-6-6"></path><path d="m8 6-6 6 6 6"></path></svg><span class="padding-horiz--sm">Before</span></span></div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">angularApp</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">xmlns</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">https://schemas.normalizedsystems.org/xsd/angularProjects/7/0/0</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">name</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">space-app</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">name</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">featureModules</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">featureModule</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">demo</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">featureModule</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">featureModules</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">angularApp</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">featureModule</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">xmlns</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">https://schemas.normalizedsystems.org/xsd/angularProjects/7/0/0</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">name</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">demo</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">name</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">featureModule</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><br></span></code></pre></div></div></div><div class="col col--6"><div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC"><span><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-code" aria-hidden="true"><path d="m16 18 6-6-6-6"></path><path d="m8 6-6 6 6 6"></path></svg><span class="padding-horiz--sm">After</span></span></div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">angularApp</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">xmlns</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">https://schemas.normalizedsystems.org/xsd/angularProjects/7/0/0</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">name</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">space-app</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">name</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">dependencies</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">dependency</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">to</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">local::angular/featureModules/demo/model/demo</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">to</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">scope</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">expansion</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">scope</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">dependency</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">dependencies</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">angularApp</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">featureModule</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">type</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">angularProjects::FeatureModule</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">xmlns</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">https://schemas.normalizedsystems.org/xsd/angularProjects/7/0/0</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">name</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">demo</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">name</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">featureModule</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><br></span></code></pre></div></div></div></div>
<div class="language-txt codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC">Folder structure</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-txt codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">project</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">├── conf</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">├── applications</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">├── angular</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">.   ├── angularApps</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    .   ├── space-app</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    .   .   ├── model</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    .       .   └── space-app.xml</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    .       .</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    .       └── angularAppModules.xml (to be removed)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    ├── featureModules</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    .   ├── demo</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    .   .   ├── model</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    .       .   └── demo.xml</span><br></span></code></pre></div></div>
<div class="theme-admonition theme-admonition-warning admonition_xJq3 alert alert--warning"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></span>New <code>LayerType</code> added</div><div class="admonitionContent_BuS1"><p>A new <code>ANGULAR_FUNCTIONS</code> <code>LayerType</code> has been added. Please add this to your custom <code>ProgramType</code> if present.</p></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="other">Other<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-beam-0.2.0#other" class="hash-link" aria-label="Direct link to Other" title="Direct link to Other" translate="no">​</a></h3>
<p>Here is a list of other issues you may encounter during the migration.</p>
<ul>
<li class="">
<p>Some expanded variables are declared with <code>?</code> instead of <code>!</code>. Custom code using these variables might need to be adapted
to handle undefined values.</p>
</li>
<li class="">
<p>The variable <code>filterOptions</code> in -form.component.ts files has been updated to be a signal. Call the variable as <code>filterOptions()</code>.</p>
</li>
<li class="">
<p>The variable <code>&lt;dataElement&gt;FilterDataSource</code> in -form.component.ts files has been renamed to <code>&lt;dataElement&gt;QueryFilterDataSource</code>.</p>
</li>
<li class="">
<p>When changing to a profile that enables the data access, you should include the <code>angular.legacy.authorization</code> option
on the AngularApp. This will make it so the data access rights defined in the Account component are used.</p>
</li>
<li class="">
<p><code>&lt;dataElement&gt;.guard.ts</code> files are no longer expanded. The logic of these file is now implemented in the <code>&lt;dataElement&gt;-filter-coordinator.directive.ts</code> files.</p>
</li>
<li class="">
<p><code>&lt;dataElement&gt;.filters.ts</code> files have been removed. Custom imports need to be changed to use <code>&lt;dataElement&gt;-filters.model</code>.</p>
</li>
</ul>]]></content:encoded>
            <category>releases</category>
            <category>migration-guide</category>
            <category>angular-expanders</category>
            <category>angular-beam</category>
        </item>
        <item>
            <title><![CDATA[Data Operations 2.0.0]]></title>
            <link>https://foundation.stars-end.net/docs/developer-hub/blog/data-operations-2.0.0</link>
            <guid>https://foundation.stars-end.net/docs/developer-hub/blog/data-operations-2.0.0</guid>
            <pubDate>Tue, 27 Jan 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Changes and improvements]]></description>
            <content:encoded><![CDATA[<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="changes-and-improvements">Changes and improvements<a href="https://foundation.stars-end.net/docs/developer-hub/blog/data-operations-2.0.0#changes-and-improvements" class="hash-link" aria-label="Direct link to Changes and improvements" title="Direct link to Changes and improvements" translate="no">​</a></h2>
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>note</div><div class="admonitionContent_BuS1"><p>The new version is still able to read models from version <code>1.x.x</code>. This means migration should be straight-forward for most cases.
For a step-by-step upgrade follow the <a class="" href="https://foundation.stars-end.net/blog/data-operations-2.0.0#migration-guide">migration guide</a>.</p></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="model-schema-adjustments">Model schema adjustments<a href="https://foundation.stars-end.net/docs/developer-hub/blog/data-operations-2.0.0#model-schema-adjustments" class="hash-link" aria-label="Direct link to Model schema adjustments" title="Direct link to Model schema adjustments" translate="no">​</a></h3>
<p>DataOperations were originally designed as an abstract type to support extending the schema. After implementing many
different types already, we have seen this was never really needed. Abstract types impose some restrictions in our
tooling which led to the decision to implement types as a field instead. This gives us three clear advantages:</p>
<ul>
<li class="">It is easy to switch between different types throughout our tooling.</li>
<li class="">It is easier to migrate from DataCommands to a <code>Custom</code> operation first, before switching to a more appropriate type later.</li>
<li class="">It is much easier to define new types in an expansionResource, without the need for your own Metamodel.</li>
</ul>
<div class="row"><div class="col col--6"><div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC"><span><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-code margin-right--sm" aria-hidden="true"><path d="m16 18 6-6-6-6"></path><path d="m8 6-6 6 6 6"></path></svg>Before</span></div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">dataOperation</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">type</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">operations::CreateOperation</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">name</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">register</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">name</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">parameterGroups</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    ...</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">parameterGroups</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">dataOperation</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></span></code></pre></div></div></div><div class="col col--6"><div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC"><span><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-code margin-right--sm" aria-hidden="true"><path d="m16 18 6-6-6-6"></path><path d="m8 6-6 6 6 6"></path></svg>After</span></div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">dataOperation</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">type</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">Create</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">type</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">name</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">register</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">name</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">parameterGroups</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    ...</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">parameterGroups</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">dataOperation</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></span></code></pre></div></div></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="simplified-parameter-types">Simplified parameter types<a href="https://foundation.stars-end.net/docs/developer-hub/blog/data-operations-2.0.0#simplified-parameter-types" class="hash-link" aria-label="Direct link to Simplified parameter types" title="Direct link to Simplified parameter types" translate="no">​</a></h3>
<p>Previously we had <code>ValueFieldParameter</code> to refer to valueFields and <code>AssociationParameter</code> to refer to linkFields. This
would sometimes be confusing from the perspective of the model. To simplify this a bit the new situation is as follows:</p>
<ul>
<li class=""><code>FieldParameter</code> with a <code>field</code> reference for both value and linkFields.</li>
<li class=""><code>AssociationParameter</code> with a <code>dataElement</code> reference for references without corresponding field. <em>(New)</em></li>
<li class="">Deprecated <del><code>ValueFieldParameter</code></del>.</li>
<li class="">Deprecated <del><code>field</code></del> reference on <code>AssociationParameter</code>.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="angular-expanders-upgrade">Angular Expanders upgrade<a href="https://foundation.stars-end.net/docs/developer-hub/blog/data-operations-2.0.0#angular-expanders-upgrade" class="hash-link" aria-label="Direct link to Angular Expanders upgrade" title="Direct link to Angular Expanders upgrade" translate="no">​</a></h3>
<p>In version <a class="" href="https://foundation.stars-end.net/blog/angular-beam-0.2.0">angular-expanders 7.0.0</a> the ui model has enabled abstract compositions for
both the <code>DataView</code> and <code>DataConnector</code>. Previously data-operation connectors, forms and actions were modeled as
extensions. These have also been changed to implement these abstract types instead.</p>
<p>As a result they will show up differently in the model files. Instead of a separate file for each connector or view,
they will now be inlined in the file of their parent.</p>
<div class="row"><div class="col col--6"><div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC"><span><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-code margin-right--sm" aria-hidden="true"><path d="m16 18 6-6-6-6"></path><path d="m8 6-6 6 6 6"></path></svg>Before</span></div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">&lt;!-- featureModules/country/model/dataViews/City.xml --&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">dataView</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">xmlns</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">https://schemas.normalizedsystems.org/xsd/angularProjects/6/0/0</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">name</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">City</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">name</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">dataConnector</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">country::City</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">dataConnector</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">dataView</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">&lt;!-- featureModules/country/model/dataViews/City/DataOperationForms/Add.xml --&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">dataOperationForm</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">xmlns</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">https://schemas.normalizedsystems.org/xsd/operationsAngular/2</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">name</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">Add</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">name</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">connector</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">country::City::register</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">connector</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">dataOperationForm</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">&lt;!-- featureModules/country/model/dataViews/City/DataOperationActions/Add.xml --&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">dataOperationAction</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">xmlns</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">https://schemas.normalizedsystems.org/xsd/operationsAngular/2</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">name</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">Add</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">name</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">connector</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">country::City::register</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">connector</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">dialog</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">form-page</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">dialog</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">form</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">country::City::Add</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">form</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">roles</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">role</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">add-action-button</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">role</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">roles</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">dataOperationAction</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></span></code></pre></div></div></div><div class="col col--6"><div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC"><span><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-code margin-right--sm" aria-hidden="true"><path d="m16 18 6-6-6-6"></path><path d="m8 6-6 6 6 6"></path></svg>After</span></div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">&lt;!-- featureModules/country/model/dataViews/City.xml --&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">dataView</span><span class="token tag" style="color:#00009f"></span><br></span><span class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">    </span><span class="token tag attr-name" style="color:#00a4db">xmlns</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">https://schemas.normalizedsystems.org/xsd/angularProjects/7/0/0</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></span><span class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">    </span><span class="token tag attr-name namespace" style="color:#00a4db;opacity:0.7">xmlns:</span><span class="token tag attr-name" style="color:#00a4db">oa</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">https://schemas.normalizedsystems.org/xsd/operationsAngular/3</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></span><span class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">    </span><span class="token tag attr-name namespace" style="color:#00a4db;opacity:0.7">xmlns:</span><span class="token tag attr-name" style="color:#00a4db">xsi</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">http://www.w3.org/2001/XMLSchema-instance</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">name</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">City</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">name</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">dataConnector</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">country::City</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">dataConnector</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">views</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">view</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">type</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">operationsAngular::DataOperationForm</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name namespace" style="color:#00a4db;opacity:0.7">xsi:</span><span class="token tag attr-name" style="color:#00a4db">type</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">oa:dataOperationForm</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag namespace" style="color:#00009f;opacity:0.7">oa:</span><span class="token tag" style="color:#00009f">name</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">Add</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag namespace" style="color:#00009f;opacity:0.7">oa:</span><span class="token tag" style="color:#00009f">name</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag namespace" style="color:#00009f;opacity:0.7">oa:</span><span class="token tag" style="color:#00009f">connector</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">country::City::register</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag namespace" style="color:#00009f;opacity:0.7">oa:</span><span class="token tag" style="color:#00009f">connector</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">view</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">view</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">type</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">operationsAngular::DataOperationAction</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name namespace" style="color:#00a4db;opacity:0.7">xsi:</span><span class="token tag attr-name" style="color:#00a4db">type</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">oa:dataOperationAction</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag namespace" style="color:#00009f;opacity:0.7">oa:</span><span class="token tag" style="color:#00009f">name</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">Add</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag namespace" style="color:#00009f;opacity:0.7">oa:</span><span class="token tag" style="color:#00009f">name</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag namespace" style="color:#00009f;opacity:0.7">oa:</span><span class="token tag" style="color:#00009f">connector</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">country::City::register</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag namespace" style="color:#00009f;opacity:0.7">oa:</span><span class="token tag" style="color:#00009f">connector</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag namespace" style="color:#00009f;opacity:0.7">oa:</span><span class="token tag" style="color:#00009f">dialog</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">form-page</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag namespace" style="color:#00009f;opacity:0.7">oa:</span><span class="token tag" style="color:#00009f">dialog</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag namespace" style="color:#00009f;opacity:0.7">oa:</span><span class="token tag" style="color:#00009f">form</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">country::City::Add</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag namespace" style="color:#00009f;opacity:0.7">oa:</span><span class="token tag" style="color:#00009f">form</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag namespace" style="color:#00009f;opacity:0.7">oa:</span><span class="token tag" style="color:#00009f">roles</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag namespace" style="color:#00009f;opacity:0.7">oa:</span><span class="token tag" style="color:#00009f">role</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">add-action-button</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag namespace" style="color:#00009f;opacity:0.7">oa:</span><span class="token tag" style="color:#00009f">role</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag namespace" style="color:#00009f;opacity:0.7">oa:</span><span class="token tag" style="color:#00009f">roles</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">view</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">views</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">dataView</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></span></code></pre></div></div></div></div>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="migration-guide">Migration guide<a href="https://foundation.stars-end.net/docs/developer-hub/blog/data-operations-2.0.0#migration-guide" class="hash-link" aria-label="Direct link to Migration guide" title="Direct link to Migration guide" translate="no">​</a></h2>
<p>Since the model files have changed, it is advised to do migration when you don't have many open PR changes to minimize merge conflicts.</p>
<p>The first step is to add the new version of the bundle to your expansionSettings:</p>
<div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC">expansionSettings.xml</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">expansionResources</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">expansionResource</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">net.democritus.bundles:data-operations-bundle::2.0.2</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">expansionResource</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">expansionResources</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></span></code></pre></div></div>
<p><em>Note</em>: Also make sure your <code>expanders-maven-plugin</code> and/or <code>micro-radiant</code> are up-to-date to avoid any version issues.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="migrating-data-operations">Migrating Data Operations<a href="https://foundation.stars-end.net/docs/developer-hub/blog/data-operations-2.0.0#migrating-data-operations" class="hash-link" aria-label="Direct link to Migrating Data Operations" title="Direct link to Migrating Data Operations" translate="no">​</a></h3>
<p>The migration happens when loading the model. This means you will be able to expand your application just fine. To persist the changes your best option is to run the following transmutation:</p>
<div class="undefined anchor transmutation-anchor" id="transmutation-upgradedataoperations"><div class="card transmutation-card"><div class="transmutation-card-header"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-list-checks card-icon" aria-hidden="true"><path d="M13 5h8"></path><path d="M13 12h8"></path><path d="M13 19h8"></path><path d="m3 17 2 2 4-4"></path><path d="m3 7 2 2 4-4"></path></svg>Transmutation<a class="hash-link" href="https://foundation.stars-end.net/docs/developer-hub/blog/data-operations-2.0.0#transmutation-upgradedataoperations" title="Direct link to transmutation"></a></div><div class="card__header"><span class="transmutation"><span class="transmutation-name">UpgradeDataOperations</span><code class="badge badge--primary">Application</code></span></div><div class="card__body"><ul>
<li class="">Upgrades all DataOperations to their corresponding types. E.g. converts a <code>operations::CreateOperation</code> to a <code>operations::DataOperation</code> with the <code>Create</code> type.</li>
<li class="">Replaces all <code>ValueFieldParameter</code> and <code>AssociationParameter</code> (with field) with <code>FieldParameter</code>.</li>
</ul></div></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="migrating-data-operations-angular">Migrating Data Operations Angular<a href="https://foundation.stars-end.net/docs/developer-hub/blog/data-operations-2.0.0#migrating-data-operations-angular" class="hash-link" aria-label="Direct link to Migrating Data Operations Angular" title="Direct link to Migrating Data Operations Angular" translate="no">​</a></h3>
<p>The migration of angular views is mostly just a rewrite of the model as well. The transmuter below will also clean up the previously used extensions:</p>
<div class="undefined anchor transmutation-anchor" id="transmutation-upgradedataoperationsviewmodel"><div class="card transmutation-card"><div class="transmutation-card-header"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-list-checks card-icon" aria-hidden="true"><path d="M13 5h8"></path><path d="M13 12h8"></path><path d="M13 19h8"></path><path d="m3 17 2 2 4-4"></path><path d="m3 7 2 2 4-4"></path></svg>Transmutation<a class="hash-link" href="https://foundation.stars-end.net/docs/developer-hub/blog/data-operations-2.0.0#transmutation-upgradedataoperationsviewmodel" title="Direct link to transmutation"></a></div><div class="card__header"><span class="transmutation"><span class="transmutation-name">UpgradeDataOperationsViewModel</span><code class="badge badge--primary">AngularApp</code></span></div><div class="card__body"><p>Upgrades all DataOperation connector and views from an extension to a composition child.
When successful, the transmutation will also delete any files previously storing the extensions.</p></div></div></div>
<p>Some inputs have been removed from the form components. If you used the form components with an <code>&lt;element&gt;Model</code> as input,
you will now first have to convert the model to a dataOperation model using the <code>&lt;DataOperation&gt;ModelMapper</code> service!
Most usages of the form component should be in expanded code however which won't need any changes.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="upgrading-mr-plugin">Upgrading MR plugin<a href="https://foundation.stars-end.net/docs/developer-hub/blog/data-operations-2.0.0#upgrading-mr-plugin" class="hash-link" aria-label="Direct link to Upgrading MR plugin" title="Direct link to Upgrading MR plugin" translate="no">​</a></h3>
<p>To load and edit the new model files with MicroRadiant, you will need to get the latest plugin for data-operations.</p>
<p>That should be all, happy coding!</p>]]></content:encoded>
            <category>releases</category>
            <category>migration-guide</category>
            <category>data-operations</category>
        </item>
        <item>
            <title><![CDATA[SQL Expanders 5.0.0]]></title>
            <link>https://foundation.stars-end.net/docs/developer-hub/blog/sql-expanders-5.0.0</link>
            <guid>https://foundation.stars-end.net/docs/developer-hub/blog/sql-expanders-5.0.0</guid>
            <pubDate>Fri, 12 Dec 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Version 5.0.0 of SQL Expanders introduces support for multiple data scripts. The data has now been more closely]]></description>
            <content:encoded><![CDATA[<p>Version <code>5.0.0</code> of SQL Expanders introduces support for multiple data scripts. The data has now been more closely
integrated with the NS model, allowing us to work with multiple scripts per application.</p>
<p>The new file format simply adds a <code>name</code> attribute to the root element. This attribute indicates the name that will be
used for the file of the generated SQL script. The name should also equal the filename.</p>
<div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC"><span><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-code" aria-hidden="true"><path d="m16 18 6-6-6-6"></path><path d="m8 6-6 6 6 6"></path></svg><span class="padding-horiz--sm">001-app-init-data.xml</span></span></div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">dataInstances</span><span class="token tag" style="color:#00009f"></span><br></span><span class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">    </span><span class="token tag attr-name" style="color:#00a4db">xmlns</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">https://schemas.normalizedsystems.org/xsd/sql-expanders/5/0/0/dataInstances</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></span><span class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">    </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">001-app-init-data</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">&lt;!-- data instances here --&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">dataInstances</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="migration">Migration<a href="https://foundation.stars-end.net/docs/developer-hub/blog/sql-expanders-5.0.0#migration" class="hash-link" aria-label="Direct link to Migration" title="Direct link to Migration" translate="no">​</a></h3>
<p>Once you upgrade the version of <code>sql-expanders</code> to <code>5.0.0</code> or above, the next time you export the application model
from micro-radiant, it will move the existing init data file and update the file to the latest format. This is now
possible because the model is aware of the init data file, represented as an <code>ApplicationData</code> meta element.</p>
<p>Do note that at this time it is not possible to modify the data in the micro-radiant, as it is not represented by a
full NS model.</p>]]></content:encoded>
            <category>sql-expanders</category>
            <category>migration-guide</category>
        </item>
        <item>
            <title><![CDATA[Jakarta EE support]]></title>
            <link>https://foundation.stars-end.net/docs/developer-hub/blog/jakarta-ee-support</link>
            <guid>https://foundation.stars-end.net/docs/developer-hub/blog/jakarta-ee-support</guid>
            <pubDate>Thu, 20 Nov 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[We're thrilled to announce a significant milestone for our JEE platform. Support for Jakarta EE is now available!]]></description>
            <content:encoded><![CDATA[<p>We're thrilled to announce a significant milestone for our JEE platform. Support for Jakarta EE is now available!
Our JEE platform expanders now target Java EE 7-8 or Jakarta EE 10.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="releases">Releases<a href="https://foundation.stars-end.net/docs/developer-hub/blog/jakarta-ee-support#releases" class="hash-link" aria-label="Direct link to Releases" title="Direct link to Releases" translate="no">​</a></h2>
<p>At this time, the full support for Jakarta EE is not yet available in beam releases. For migrating expanders and testing
until the time that these releases make it into the beams, we've provided developer previews that mirror the beams, but
contain the latest versions of all expansion resources.</p>
<table><thead><tr><th>Expansion resource</th><th>Version</th><th>Description</th></tr></thead><tbody><tr><td><code>net.democritus.preview:minimal-jee-dev-preview</code></td><td><code>1.1.0</code></td><td>A mirror of the <code>minimal-jee-beam</code>.</td></tr><tr><td><code>net.democritus.preview:standard-api-dev-preview</code></td><td><code>1.1.0</code></td><td>A mirror of the <code>standard-api-beam</code>.</td></tr><tr><td><code>net.democritus.preview:service-api-dev-preview</code></td><td><code>1.0.1</code></td><td>A mirror of the <code>service-api-beam</code>.</td></tr><tr><td><code>net.democritus.preview:process-automation-dev-preview</code></td><td><code>1.0.0</code></td><td>A mirror of the <code>process-automation-beam</code>.</td></tr></tbody></table>
<div class="theme-admonition theme-admonition-caution admonition_xJq3 alert alert--warning"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></span>Warning</div><div class="admonitionContent_BuS1"><p>The dev previews are <strong>not intended for use in projects</strong>. While we try to do thorough automated testing of these
releases to ensure stability, we do not offer the same guarantees as with the beams. The content may also be subject to
change by the time the next release of a beam arrives. While these releases may contain the same elements as the
corresponding beams, they are synced back up to the structure of the beams whenever a release of the beam occurs.</p><p>The goal of these previews is to provide a resource that can be used to test upcoming functionality ahead of time in
case there are new features or changes that a project may want to prepare for ahead of time. One such example is the
migration to Jakarta EE, where the migration path may require extra effort for some projects.</p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="preparing-your-expander-project">Preparing your expander project<a href="https://foundation.stars-end.net/docs/developer-hub/blog/jakarta-ee-support#preparing-your-expander-project" class="hash-link" aria-label="Direct link to Preparing your expander project" title="Direct link to Preparing your expander project" translate="no">​</a></h2>
<p>Expander projects may require some updates if they expand code with <code>javax</code> imports. The first step would be to migrate
those specific expanders to the <a class="" href="https://foundation.stars-end.net/docs/ecosystem/engineering-solutions/expanders/basics/import-mapping/#java-imports">new imports system</a>.</p>
<p>When moving the imports to the mapping file, they should be redefined as the new jakarta imports. The imports as defined
in the mapping should be considered the optional/default case:</p>
<div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC"><span><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-code" aria-hidden="true"><path d="m16 18 6-6-6-6"></path><path d="m8 6-6 6 6 6"></path></svg><span class="padding-horiz--sm">ExpanderMapping.xml</span></span></div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token prolog" style="color:#999988;font-style:italic">&lt;?xml version="1.0" encoding="UTF-8" ?&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">mapping</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">xmlns</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">https://schemas.normalizedsystems.org/xsd/expanders/2025/0/0/mapping</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">strict</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">true</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">artifact</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">this</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">dataElement.packageName + '.' + dataElement.name + 'ImportantBean'</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">importStrategy</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">java</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line theme-code-block-highlighted-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">uses</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">eval</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value punctuation" style="color:#393A34">'</span><span class="token tag attr-value" style="color:#e3116c">jakarta.servlet.http.HttpServletRequest'</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></span><span class="token-line theme-code-block-highlighted-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">uses</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">eval</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value punctuation" style="color:#393A34">'</span><span class="token tag attr-value" style="color:#e3116c">jakarta.servlet.http.HttpServletResponse'</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">mapping</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></span></code></pre></div></div>
<p>In addition, it will be required to add a
<a class="" href="https://foundation.stars-end.net/docs/ecosystem/engineering-solutions/expanders/basics/import-mapping/#technology-dependent-imports">technology lexicon</a> to map the imports
back to the old <code>javax</code> equivalent. This in essence allows you to define how the imports should be rewritten if a
specific technology is active in the model. Note that these are defined as data resources and will be inherited from
dependencies. Many imports may already remap automatically if you depend on a resource such as <code>Expanders</code> that had its
own technology lexicon.</p>
<div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC"><span><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-code" aria-hidden="true"><path d="m16 18 6-6-6-6"></path><path d="m8 6-6 6 6 6"></path></svg><span class="padding-horiz--sm">javaee-classes.xml</span></span></div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">dataResource</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">type</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">expansionControl::TechnologyLexicon</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">technologyLexicon</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">technology</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">JAVA_EE</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">coordinateRedirections</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">coordinateRedirection</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">coordinate</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">jakarta.servlet.http.HttpServletRequest</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">coordinate</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">target</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">javax.servlet.http.HttpServletRequest</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">target</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">coordinateRedirection</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">coordinateRedirection</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">coordinate</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">jakarta.servlet.http.HttpServletResponse</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">coordinate</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">target</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">javax.servlet.http.HttpServletResponse</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">target</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">coordinateRedirection</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">coordinateRedirections</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">technologyLexicon</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">dataResource</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="migrating-applications">Migrating applications<a href="https://foundation.stars-end.net/docs/developer-hub/blog/jakarta-ee-support#migrating-applications" class="hash-link" aria-label="Direct link to Migrating applications" title="Direct link to Migrating applications" translate="no">​</a></h2>
<p>When migrating applications there are only two important steps:</p>
<ol>
<li class="">Updating the settings of the project to target Jakarta.</li>
<li class="">Migrate custom code in harvests and ext files if needed.</li>
</ol>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="updating-project-settings">Updating project settings<a href="https://foundation.stars-end.net/docs/developer-hub/blog/jakarta-ee-support#updating-project-settings" class="hash-link" aria-label="Direct link to Updating project settings" title="Direct link to Updating project settings" translate="no">​</a></h3>
<ol>
<li class="">
<p>Upgrade your expansion settings (typically in <code>conf/expansionSettings.conf</code>) to use versions of expansion resources
that support Jakarta EE.</p>
</li>
<li class="">
<p>In the technical infrastructure settings, the JEE version should be updated to <code>10</code>:</p>
<div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC"><span><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-code" aria-hidden="true"><path d="m16 18 6-6-6-6"></path><path d="m8 6-6 6 6 6"></path></svg><span class="padding-horiz--sm">Java&nbsp;21.xml</span></span></div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">technicalInfrastructure</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">Java 21</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">javaVersion</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">jdk21</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">javaVersion</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line theme-code-block-highlighted-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">jeeVersion</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">10</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">jeeVersion</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">technicalInfrastructure</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></span></code></pre></div></div>
</li>
<li class="">
<p>Add the <code>hibernate.version</code> option with value <code>6</code> to your <code>Application</code> model.</p>
<div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC"><span><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-code" aria-hidden="true"><path d="m16 18 6-6-6-6"></path><path d="m8 6-6 6 6 6"></path></svg><span class="padding-horiz--sm">myapplication.xml</span></span></div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">application</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">myapplication</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">shortName</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">myapplication</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">shortName</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">version</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">1.0.0</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">version</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">components</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">component</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">account</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">component</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">assets</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">component</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">utils</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">component</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">validation</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">component</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">workflow</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">component</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">applicationStuff</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">components</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">options</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line theme-code-block-highlighted-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">hibernate.version</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">6</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">hibernate.version</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">options</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">application</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></span></code></pre></div></div>
</li>
<li class="">
<p>Update the TomEE base image for Docker to a TomEE 10 variant. The latest version can be found on the
<a class="" href="https://foundation.stars-end.net/docs/ecosystem/ns-application/deployment/docker/nsx-tomee-base">documentation page for the base image</a>.
Today, this is:</p>
<ul>
<li class=""><code>docker.normalizedsystems.org/nsx-tomee-base:10.1.2-3.11.1</code> for root-based images</li>
<li class=""><code>docker.normalizedsystems.org/nsx-tomee-base:10.1.2-3.11.1-rootless</code> for rootless images</li>
</ul>
</li>
</ol>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="migrating-custom-code">Migrating custom code<a href="https://foundation.stars-end.net/docs/developer-hub/blog/jakarta-ee-support#migrating-custom-code" class="hash-link" aria-label="Direct link to Migrating custom code" title="Direct link to Migrating custom code" translate="no">​</a></h3>
<p>Most custom code will be compatible with Jakarta EE already and will not require any changes. The majority of required
changes will be the package names that changed from <code>javax.*</code> to <code>jakarta.*</code>. These are easy to identify once you
migrate the project settings and expand, as those imports will no longer be found. This is solved by simply replacing
<code>import javax.</code> with <code>import jakarta.</code>.</p>
<div class="theme-admonition theme-admonition-caution admonition_xJq3 alert alert--warning"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></span>Warning</div><div class="admonitionContent_BuS1"><p>Be careful when replacing imports. While the majority of imports in <code>javax</code> packages have moved to <code>jakarta</code> packages,
this is not true for all imports!</p><p>The switch to Jakarta occurred when Oracle transferred Java EE to Eclipse Foundation. Because Oracle owns the Java
trademark, the name had to change under Eclipse Foundation to Jakarta to avoid trademark conflicts. There are also
classes in <code>javax</code> packages that are part of the standard Java platform API, which is still owned by Oracle and such
they were not renamed to <code>jakarta</code>.</p><p>An example of classes that were not renamed is everything in <code>javax.naming</code>.</p></div></div>]]></content:encoded>
            <category>jakarta-ee</category>
            <category>jee</category>
            <category>migration-guide</category>
        </item>
        <item>
            <title><![CDATA[Java 25 Support]]></title>
            <link>https://foundation.stars-end.net/docs/developer-hub/blog/java-25-support</link>
            <guid>https://foundation.stars-end.net/docs/developer-hub/blog/java-25-support</guid>
            <pubDate>Tue, 04 Nov 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[We now offer support for Java 25 in our JEE applications. Java 25 comes with some new features and performance]]></description>
            <content:encoded><![CDATA[<p>We now offer support for Java 25 in our JEE applications. Java 25 comes with some new features and performance
enhancements as listed in the official <a href="https://www.oracle.com/java/technologies/javase/25-relnote-issues.html" target="_blank" rel="noopener noreferrer" class="">release publication</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="java-25-at-runtime">Java 25 at runtime<a href="https://foundation.stars-end.net/docs/developer-hub/blog/java-25-support#java-25-at-runtime" class="hash-link" aria-label="Direct link to Java 25 at runtime" title="Direct link to Java 25 at runtime" translate="no">​</a></h2>
<p>TomEE 8 was not compatible with Java 25 due to the removal of the <code>SecurityManager</code> in Java 24
(<a href="https://inside.java/2024/12/11/quality-heads-up/" target="_blank" rel="noopener noreferrer" class="">deprecated in Java 17</a>). A workaround for this issue was added in
version 10.2.1 of TomEE. We've now also backported this change to version 8 in our fork of TomEE 8 and released it as
part of our TomEE 8.0.19 update.</p>
<p>For now our images will still default to Java 21, but by adding the <code>jre25</code> modifier to the image tags, you can already
make use of the latest LTS version of Java.</p>
<p>Today, this is:</p>
<ul>
<li class=""><code>docker.normalizedsystems.org/nsx-tomee-base:8.0.19-3.11.1-jre25</code> for root-based images</li>
<li class=""><code>docker.normalizedsystems.org/nsx-tomee-base:8.0.19-3.11.1-jre25-rootless</code> for rootless images</li>
</ul>
<p>For the latest version of the image, please refer to the <a class="" href="https://foundation.stars-end.net/docs/ecosystem/ns-application/deployment/docker/nsx-tomee-base">image documentation page</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="compiling-for-java-25">Compiling for Java 25<a href="https://foundation.stars-end.net/docs/developer-hub/blog/java-25-support#compiling-for-java-25" class="hash-link" aria-label="Direct link to Compiling for Java 25" title="Direct link to Compiling for Java 25" translate="no">​</a></h2>
<p>To compile for Java 25 and use its language features, you need to change the Java version in the technical
infrastructure settings file of your JEE project. Ideally you would also make a new settings file as the name of the
settings is typically the version of Java. If you make a new file with a new name, also update the
<code>technicalInfrastructure</code> reference in your application instance.</p>
<div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">technicalInfrastructure</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">Java 25</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line theme-code-block-highlighted-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">javaVersion</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">jdk25</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">javaVersion</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">jeeVersion</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">8</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">jeeVersion</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">technicalInfrastructure</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></span></code></pre></div></div>
<div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">applicationInstance</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">my-application</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">shortName</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">my-application</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">shortName</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">version</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">1.0.0</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">version</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">globalOptionSettings</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">3.0 Modern</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">presentationSettings</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">3.1 Future</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">businessLogicSettings</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">TomEE Postgres Hibernate</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">technicalInfrastructure</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">Java 25</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">applicationInstance</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></span></code></pre></div></div>
<p>In addition to this change, you need at least version <code>9.1.0</code> of <code>net.democritus:Expanders</code> in your project to target
Java 25.</p>]]></content:encoded>
            <category>java</category>
        </item>
        <item>
            <title><![CDATA[Data Operations 1.1.0]]></title>
            <link>https://foundation.stars-end.net/docs/developer-hub/blog/data-operations-1.1.0</link>
            <guid>https://foundation.stars-end.net/docs/developer-hub/blog/data-operations-1.1.0</guid>
            <pubDate>Fri, 12 Sep 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[We've moved data-operations out of its experimental]]></description>
            <content:encoded><![CDATA[<p>We've moved <a class="" href="https://foundation.stars-end.net/docs/ecosystem/ns-application/application/data-elements/data-operations/data-operations/">data-operations</a> out of its experimental
phase. This means it can now be adopted by any project which may need it. They are a successor to data-commands which
means you can decide to migrate data-commands which undoubtedly have many uses throughout your application.</p>
<p>You can get started by adding the bundle:</p>
<div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">expansionResources</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">expansionResource</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">net.democritus:data-operations-bundle</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">version</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">1.1.0</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">expansionResources</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></span></code></pre></div></div>
<p>Please note data-commands will <strong>not</strong> be deprecated and can remain to be used. Data-operations provide a more
expressive model and improvements to the runtime so we do recommend switching, but this is not a <em>requirement</em>. If you
want to migrate, the decision tree below will help you with deciding which type of Operation is the best replacement
for a data-command.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="command-decision-tree">Command Decision Tree<a href="https://foundation.stars-end.net/docs/developer-hub/blog/data-operations-1.1.0#command-decision-tree" class="hash-link" aria-label="Direct link to Command Decision Tree" title="Direct link to Command Decision Tree" translate="no">​</a></h2>
]]></content:encoded>
            <category>releases</category>
            <category>migration-guide</category>
            <category>data-operations</category>
        </item>
        <item>
            <title><![CDATA[Angular Expanders 6.14.0]]></title>
            <link>https://foundation.stars-end.net/docs/developer-hub/blog/angular-expanders-6.14.0</link>
            <guid>https://foundation.stars-end.net/docs/developer-hub/blog/angular-expanders-6.14.0</guid>
            <pubDate>Fri, 22 Aug 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Changes and improvements]]></description>
            <content:encoded><![CDATA[<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="changes-and-improvements">Changes and improvements<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-expanders-6.14.0#changes-and-improvements" class="hash-link" aria-label="Direct link to Changes and improvements" title="Direct link to Changes and improvements" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="module-metamodel-support">Module-metamodel support<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-expanders-6.14.0#module-metamodel-support" class="hash-link" aria-label="Direct link to Module-metamodel support" title="Direct link to Module-metamodel support" translate="no">​</a></h3>
<p>In this version a dependency to the module-metamodel has been added. This allows for easy declaration of
dependencies between modules, which are in this case <code>FeatureModules</code>.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-would-you-want-to-declare-dependencies-between-different-featuremodules">Why would you want to declare dependencies between different <code>FeatureModules</code>?<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-expanders-6.14.0#why-would-you-want-to-declare-dependencies-between-different-featuremodules" class="hash-link" aria-label="Direct link to why-would-you-want-to-declare-dependencies-between-different-featuremodules" title="Direct link to why-would-you-want-to-declare-dependencies-between-different-featuremodules" translate="no">​</a></h3>
<p>For example, you have a common <code>FeatureModule</code> that declares some
<code>DataConnectors</code> and another <code>FeatureModule</code> containing <code>DataViews</code> that want to reuse already declared
<code>DataConnectors</code>. When there is no possibility to declare dependencies between them, the expansion becomes
unreliable. After explicitly defining the dependencies, the expansion will always make sure that the correct
resources are loaded at the right time.</p>
<p>In order to get this to work you should add a <code>angularAppModules.xml</code> file to your project.</p>
<div class="language-txt codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC">Where to place</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-txt codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">project</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">├── conf</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">├── applications</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">├── angular</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">.   ├── angularApps</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    .   ├── space-app</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        .   ├── model</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            .   └── space-app.xml</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            .</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            └── angularAppModules.xml</span><br></span></code></pre></div></div>
<div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC">Example declaration</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">programModules</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">xmlns</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">https://schemas.normalizedsystems.org/xsd/modules/1</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">modules</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">module</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">moduleId</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">featureModules::api</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">moduleId</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">moduleType</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">angularProjects::FeatureModule</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">moduleType</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">module</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">module</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">moduleId</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">featureModules::geo</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">moduleId</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">moduleType</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">angularProjects::FeatureModule</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">moduleType</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">dependencies</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">dependency</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">featureModules::api</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">dependency</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">dependencies</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">module</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">module</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">moduleId</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">featureModules::transport</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">moduleId</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">moduleType</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">angularProjects::FeatureModule</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">moduleType</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">dependencies</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">dependency</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">featureModules::api</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">dependency</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">dependencies</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">module</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">modules</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">programModules</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></span></code></pre></div></div>
<p>You are not required to add all <code>FeatureModules</code> here, only if you want to indicate some dependencies.</p>
<p>See the <a href="https://github.com/normalizedsystems/modules-metamodel" target="_blank" rel="noopener noreferrer" class="">modules-metamodel repo</a> for more information.</p>]]></content:encoded>
            <category>releases</category>
            <category>migration-guide</category>
            <category>angular-expanders</category>
        </item>
        <item>
            <title><![CDATA[APT Certificate Expired]]></title>
            <link>https://foundation.stars-end.net/docs/developer-hub/blog/apt-certificate-expired</link>
            <guid>https://foundation.stars-end.net/docs/developer-hub/blog/apt-certificate-expired</guid>
            <pubDate>Thu, 14 Aug 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[If you are using our tooling with Ubuntu and your apt update command indicates that your certificate is no longer]]></description>
            <content:encoded><![CDATA[<p>If you are using our tooling with Ubuntu and your <code>apt update</code> command indicates that your certificate is no longer
valid, you are probably using an expired copy of our signing certificate. Please update it to the current version by
executing the following command:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">sudo</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">bash</span><span class="token plain"> </span><span class="token parameter variable" style="color:#36acaa">-c</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"wget -q -O - https://foundation.stars-end.net/files/rotate-keys.sh | bash &lt;(cat) &lt;/dev/tty"</span><br></span></code></pre></div></div>]]></content:encoded>
            <category>apt</category>
            <category>ubuntu</category>
        </item>
        <item>
            <title><![CDATA[Expanders 9]]></title>
            <link>https://foundation.stars-end.net/docs/developer-hub/blog/expanders-9</link>
            <guid>https://foundation.stars-end.net/docs/developer-hub/blog/expanders-9</guid>
            <pubDate>Wed, 06 Aug 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Version 9 of Expanders introduces support for Jakarta EE as part of an effort to support this across our entire]]></description>
            <content:encoded><![CDATA[<p>Version 9 of Expanders introduces support for Jakarta EE as part of an effort to support this across our entire
ecosystem. This also marks the completion of the first phase of this migration, where the entire JEE base application
stack is supported for both Java EE and Jakarta EE, including process automation.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="breaking-change-for-struts2">Breaking change for Struts2<a href="https://foundation.stars-end.net/docs/developer-hub/blog/expanders-9#breaking-change-for-struts2" class="hash-link" aria-label="Direct link to Breaking change for Struts2" title="Direct link to Breaking change for Struts2" translate="no">​</a></h2>
<p>With this release of Expanders, we support both Struts2 <code>6.x</code> and <code>7.x</code> to match the different versions of JEE. Since
Struts2 completely removed support for the <code>fileUpload</code> interceptor in version 7, we've now also removed it from our
application stack. The reasoning behind this decision is that this interceptor was responsible for <code>CVE-2024-53677</code>,
which has a score of <code>9.5</code> on the CVSS 4 scale. The alternative implementation using the <code>actionFileUpload</code> interceptor
has been implemented across all of our expanders for several months now, but custom upload actions will also have to be
refactored to switch to the new system. Regrettably, the impact of this change will not be visible at compile time, so
care must be taking when upgrading to version 9 of Expanders.</p>
<blockquote>
<ul>
<li class="">NIST listing: <a href="https://nvd.nist.gov/vuln/detail/CVE-2024-53677" target="_blank" rel="noopener noreferrer" class="">https://nvd.nist.gov/vuln/detail/CVE-2024-53677</a></li>
<li class="">Sonatype article: <a href="https://www.sonatype.com/blog/cve-2024-53677-a-critical-file-upload-vulnerability-in-apache-struts2" target="_blank" rel="noopener noreferrer" class="">https://www.sonatype.com/blog/cve-2024-53677-a-critical-file-upload-vulnerability-in-apache-struts2</a></li>
</ul>
</blockquote>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="migration">Migration<a href="https://foundation.stars-end.net/docs/developer-hub/blog/expanders-9#migration" class="hash-link" aria-label="Direct link to Migration" title="Direct link to Migration" translate="no">​</a></h3>
<p>The migration is fairly straight-forward and is described in this migration guide from Struts2:
<a href="https://struts.apache.org/core-developers/action-file-upload-interceptor" target="_blank" rel="noopener noreferrer" class="">https://struts.apache.org/core-developers/action-file-upload-interceptor</a></p>
<p>An action that handles uploads should be modified by implementing the <code>UploadedFilesAware</code> interface. With this
interface comes a method <code>withUploadedFiles()</code> that should be implemented. To retain backwards compatibility with
existing implementations, it is possible to set the values of existing fields in the class from this method, which
were previously set dynamically by the old interceptor using reflection.</p>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>Migration example</div><div class="admonitionContent_BuS1"><p>Below you will find a small sample of how we applied this migration to the <code>AssetUploader</code> class.</p><div class="row"><div class="col col--6"><div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC"><span><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-code" aria-hidden="true"><path d="m16 18 6-6-6-6"></path><path d="m8 6-6 6 6 6"></path></svg><span class="padding-horiz--sm">Before</span></span></div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">public</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name">AssetUploader</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">extends</span><span class="token plain"> </span><span class="token class-name">ActionSupport</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">private</span><span class="token plain"> </span><span class="token class-name">File</span><span class="token plain"> uploadData</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// the actual file</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">private</span><span class="token plain"> </span><span class="token class-name">String</span><span class="token plain"> uploadDataContentType</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// the content type of the file</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">private</span><span class="token plain"> </span><span class="token class-name">String</span><span class="token plain"> uploadDataFileName</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// the uploaded file name</span><br></span></code></pre></div></div></div><div class="col col--6"><div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC"><span><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-code" aria-hidden="true"><path d="m16 18 6-6-6-6"></path><path d="m8 6-6 6 6 6"></path></svg><span class="padding-horiz--sm">After</span></span></div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">public</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">class</span><span class="token plain"> </span><span class="token class-name">AssetUploader</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">extends</span><span class="token plain"> </span><span class="token class-name">ActionSupport</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">implements</span><span class="token plain"> </span><span class="token class-name">UploadedFilesAware</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">private</span><span class="token plain"> </span><span class="token class-name">File</span><span class="token plain"> uploadData</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// the actual file</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">private</span><span class="token plain"> </span><span class="token class-name">String</span><span class="token plain"> uploadDataContentType</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// the content type of the file</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">private</span><span class="token plain"> </span><span class="token class-name">String</span><span class="token plain"> uploadDataFileName</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// the uploaded file name</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token annotation punctuation" style="color:#393A34">@Override</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">public</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">void</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">withUploadedFiles</span><span class="token punctuation" style="color:#393A34">(</span><span class="token class-name">List</span><span class="token generics punctuation" style="color:#393A34">&lt;</span><span class="token generics class-name">UploadedFile</span><span class="token generics punctuation" style="color:#393A34">&gt;</span><span class="token plain"> uploadedFiles</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token operator" style="color:#393A34">!</span><span class="token plain">uploadedFiles</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">isEmpty</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token keyword" style="color:#00009f">final</span><span class="token plain"> </span><span class="token class-name">UploadedFile</span><span class="token plain"> uploadedFile </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> uploadedFiles</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">get</span><span class="token punctuation" style="color:#393A34">(</span><span class="token number" style="color:#36acaa">0</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">uploadData </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name">File</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">uploadedFile</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">getAbsolutePath</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">uploadDataContentType </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> uploadedFile</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">getContentType</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token keyword" style="color:#00009f">this</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">uploadDataFileName </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> uploadedFile</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">getOriginalName</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div></div></div></div></div>]]></content:encoded>
            <category>releases</category>
            <category>migration-guide</category>
            <category>expanders</category>
            <category>jakarta-ee</category>
        </item>
        <item>
            <title><![CDATA[Micro-Radiant 4.0.0]]></title>
            <link>https://foundation.stars-end.net/docs/developer-hub/blog/micro-radiant-4.0</link>
            <guid>https://foundation.stars-end.net/docs/developer-hub/blog/micro-radiant-4.0</guid>
            <pubDate>Fri, 13 Jun 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[This version introduces changes to how the javascript runtime libraries are loaded.]]></description>
            <content:encoded><![CDATA[<p>This version introduces changes to how the javascript runtime libraries are loaded.
It allows us to update the glint libraries without having to release a new micro-radiant version and removes a bottleneck that prevented us from introducing new components for the plugins.</p>
<p>There are also various improvements to better handle errors and reduce the number of synchronization issues.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="changes-and-improvements">Changes and improvements<a href="https://foundation.stars-end.net/docs/developer-hub/blog/micro-radiant-4.0#changes-and-improvements" class="hash-link" aria-label="Direct link to Changes and improvements" title="Direct link to Changes and improvements" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="glint">Glint<a href="https://foundation.stars-end.net/docs/developer-hub/blog/micro-radiant-4.0#glint" class="hash-link" aria-label="Direct link to Glint" title="Direct link to Glint" translate="no">​</a></h3>
<p>The glint runtime is now packaged as part of a dedicated plugin.
New releases are now available to the users as plugin updates.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="errors">Errors<a href="https://foundation.stars-end.net/docs/developer-hub/blog/micro-radiant-4.0#errors" class="hash-link" aria-label="Direct link to Errors" title="Direct link to Errors" translate="no">​</a></h3>
<ul>
<li class="">Improved the representation of errors that cause the project loading to fail, such as missing Components or invalid expansion-resources.</li>
<li class="">There was an issue that caused the project to get stuck in loading when an expansion-resources could not be found. This now shows an decent error message.</li>
<li class="">Fixed bug causing error messages to appear as <code>[Object object]</code>.</li>
<li class="">Improved handling on newlines in error detail.</li>
<li class="">Fixed issue where a missing Component would be shown as an unknown error.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="synchronization">Synchronization<a href="https://foundation.stars-end.net/docs/developer-hub/blog/micro-radiant-4.0#synchronization" class="hash-link" aria-label="Direct link to Synchronization" title="Direct link to Synchronization" translate="no">​</a></h3>
<ul>
<li class="">Fixed issue where changes to nested elements, like ValueField in Field would not cause a model update. This had the unfortunate effect of these changes not being exported.</li>
<li class="">Fixed issue where the model server would report changes to properties not known by the plugins, causing the plugin to get confused.</li>
<li class="">Fixed issue in select-multiple-field where removing an option did not cause any updates.</li>
<li class="">Fixed error in serialization breaking on an undefined value.</li>
<li class="">Fixed issue when selecting a ValueFieldType that cleared the ValueField instead.</li>
<li class="">Fixed issue where a SimpleValueType would contain too many NativeTypes when first created.</li>
<li class="">Fixed issue where the last item of a list could not be removed.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="diagrams">Diagrams<a href="https://foundation.stars-end.net/docs/developer-hub/blog/micro-radiant-4.0#diagrams" class="hash-link" aria-label="Direct link to Diagrams" title="Direct link to Diagrams" translate="no">​</a></h3>
<ul>
<li class="">DataElement diagrams are now updated when making changes instead of needing a refresh.</li>
<li class="">Improved zoom behaviour of class diagrams to better respond to changes, in line with the state diagrams.</li>
<li class="">Added search field for classes in the class diagrams. The graph will zoom in on the class if there is a single match.</li>
<li class="">Fixed marker on aggregation edges.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="miscellaneous">Miscellaneous<a href="https://foundation.stars-end.net/docs/developer-hub/blog/micro-radiant-4.0#miscellaneous" class="hash-link" aria-label="Direct link to Miscellaneous" title="Direct link to Miscellaneous" translate="no">​</a></h3>
<ul>
<li class="">Imported modules, such as the base-components, are now readonly. You will not be able to perform actions and form fields are replaced with static text.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="migration">Migration<a href="https://foundation.stars-end.net/docs/developer-hub/blog/micro-radiant-4.0#migration" class="hash-link" aria-label="Direct link to Migration" title="Direct link to Migration" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="upgrading-mr-plugin">Upgrading MR plugin<a href="https://foundation.stars-end.net/docs/developer-hub/blog/micro-radiant-4.0#upgrading-mr-plugin" class="hash-link" aria-label="Direct link to Upgrading MR plugin" title="Direct link to Upgrading MR plugin" translate="no">​</a></h3>
<ul>
<li class="">Update the <code>mr-plugin-expanders</code> to 5.0.0 or newer.</li>
<li class="">Change the profile in expansionSettings.xml to <code>NSX Plugin 4</code> or <code>Standard Plugin 4</code>.
With this, the plugin will now target MR v4 and cannot be used in earlier versions.</li>
<li class="">Add the following expansion-resource:<!-- -->
<div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">expansionResource</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">net.democritus.editor:mr-plugin-glint</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">version</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">2.6.2</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><br></span></code></pre></div></div>
</li>
</ul>
<p>The glint expansion-resource can be updated to new releases to make use of new API's.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="metamodel-improvements">Metamodel improvements<a href="https://foundation.stars-end.net/docs/developer-hub/blog/micro-radiant-4.0#metamodel-improvements" class="hash-link" aria-label="Direct link to Metamodel improvements" title="Direct link to Metamodel improvements" translate="no">​</a></h3>
<p><a class="" href="https://foundation.stars-end.net/docs/releases/changelog/nsx-metamodels#2025.8.0">nsx-metamodel-stack v2025.8.0</a> has features to define formatting and
required attributes.
These will generate model validations. In addition, the <code>mr-plugin-expanders</code> will add field validations to the forms.</p>]]></content:encoded>
            <category>releases</category>
            <category>micro-radiant</category>
        </item>
        <item>
            <title><![CDATA[Angular Expanders 6.1.0]]></title>
            <link>https://foundation.stars-end.net/docs/developer-hub/blog/angular-expanders-6.1.0</link>
            <guid>https://foundation.stars-end.net/docs/developer-hub/blog/angular-expanders-6.1.0</guid>
            <pubDate>Wed, 07 May 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Changes and improvements]]></description>
            <content:encoded><![CDATA[<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="changes-and-improvements">Changes and improvements<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-expanders-6.1.0#changes-and-improvements" class="hash-link" aria-label="Direct link to Changes and improvements" title="Direct link to Changes and improvements" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="ln0x-support">Ln0x support<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-expanders-6.1.0#ln0x-support" class="hash-link" aria-label="Direct link to Ln0x support" title="Direct link to Ln0x support" translate="no">​</a></h3>
<p>Previously only <code>Ln02</code> link fields were supported, this has been extended to the full range of <code>Ln0x</code> that is
implemented by the chosen control layer (<code>std-api</code> or <code>svc-api</code>). This behaviour is locked behind a profile for
backwards compatibility reasons:</p>
<ul>
<li class=""><code>Std API Ln0x</code></li>
<li class=""><code>Std API yarn Ln0x</code></li>
<li class=""><code>Svc API Ln0x</code></li>
<li class=""><code>Svc API yarn Ln0x</code></li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="new-number-field-component">New number field component<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-expanders-6.1.0#new-number-field-component" class="hash-link" aria-label="Direct link to New number field component" title="Direct link to New number field component" translate="no">​</a></h3>
<p>A new number field component has been introduced that handles text input in the fields more gracefully. The
component also implements some fraction digits validators, adding more functionality. The component is powered by
an I18N number formatter that handles fraction separators and number bounds correctly. Default this is set to the
locale <code>en-GB</code>. For Dutch formatting use <code>nl-BE</code> in the <code>app.config.ts</code>.</p>]]></content:encoded>
            <category>releases</category>
            <category>migration-guide</category>
            <category>angular-expanders</category>
        </item>
        <item>
            <title><![CDATA[Expanders-Core 8.1.1]]></title>
            <link>https://foundation.stars-end.net/docs/developer-hub/blog/expanders-core-8.1</link>
            <guid>https://foundation.stars-end.net/docs/developer-hub/blog/expanders-core-8.1</guid>
            <pubDate>Fri, 25 Apr 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Changes and improvements]]></description>
            <content:encoded><![CDATA[<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="changes-and-improvements">Changes and improvements<a href="https://foundation.stars-end.net/docs/developer-hub/blog/expanders-core-8.1#changes-and-improvements" class="hash-link" aria-label="Direct link to Changes and improvements" title="Direct link to Changes and improvements" translate="no">​</a></h2>
<ul>
<li class="">String interpolation</li>
<li class="">Strict mode to catch errors in mapping.xml</li>
<li class="">New list mapping syntax</li>
<li class="">Improved stack-traces</li>
<li class="">Support for extending the context of artifact paths, mapping files etc.</li>
</ul>
<!-- -->
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="string-interpolation">String interpolation<a href="https://foundation.stars-end.net/docs/developer-hub/blog/expanders-core-8.1#string-interpolation" class="hash-link" aria-label="Direct link to String interpolation" title="Direct link to String interpolation" translate="no">​</a></h3>
<p>String interpolation support in OGNL expressions for compact String creation.</p>
<div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">value</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">path</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">eval</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">format('${component.name}/${component.version}')</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="strict-mapping">Strict mapping<a href="https://foundation.stars-end.net/docs/developer-hub/blog/expanders-core-8.1#strict-mapping" class="hash-link" aria-label="Direct link to Strict mapping" title="Direct link to Strict mapping" translate="no">​</a></h3>
<p>Mapping file can use 'strict' mapping, which fails when using a variable that is not bound.</p>
<div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">mapping</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">xmlns</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">https://schemas.normalizedsystems.org/xsd/expanders/2025/0/0/mapping</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></span><span class="token-line theme-code-block-highlighted-line" style="color:#393A34"><span class="token tag" style="color:#00009f">         </span><span class="token tag attr-name" style="color:#00a4db">strict</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">true</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">&lt;!-- Fails because typo refers to a non-existing variable. --&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">let</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">dataElements</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">eval</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">componnet.dataElements</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><br></span></code></pre></div></div>
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>note</div><div class="admonitionContent_BuS1"><p>This feature is not enabled by default to avoid breaking existing expanders.
But it is recommended to use it when writing Expanders.</p></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="new-list-mapping-syntax">New list mapping syntax<a href="https://foundation.stars-end.net/docs/developer-hub/blog/expanders-core-8.1#new-list-mapping-syntax" class="hash-link" aria-label="Direct link to New list mapping syntax" title="Direct link to New list mapping syntax" translate="no">​</a></h3>
<div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">list</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">valueFields</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">&lt;!-- for-each element replaces attributes in the header --&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">foreach</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">dataElement</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">in</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">component.dataElements</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">foreach</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">field</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">in</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">dataElement.fields</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">value</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">field</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">eval</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">field.name</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">&lt;!-- Sort item by a specific value --&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">sorted</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">eval</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">field.name</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">list</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">list</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">names</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">&lt;!-- Add a single item --&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">item</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">value</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">name</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">eval</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">component.name</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">item</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">&lt;!-- Combine multiple lists --&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">items</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">foreach</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">dataElement</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">in</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">component.dataElements</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">value</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">name</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">eval</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">dataElement.name</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">items</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">items</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">foreach</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">taskElement</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">in</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">component.taskElements</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">value</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">name</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">eval</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">taskElement.name</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">items</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">list</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></span></code></pre></div></div>
<p><a class="" href="https://foundation.stars-end.net/docs/ecosystem/engineering-solutions/expanders/basics/expander-mapping#list">See more</a></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="improved-stack-traces">Improved stack-traces<a href="https://foundation.stars-end.net/docs/developer-hub/blog/expanders-core-8.1#improved-stack-traces" class="hash-link" aria-label="Direct link to Improved stack-traces" title="Direct link to Improved stack-traces" translate="no">​</a></h3>
<p>Stack-traces of errors in the Expanders have been reworked to be more legible and provide more information.</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">net.democritus.expansion.mapping.PropertyMappingException: Encountered error trying to resolve Value&lt;field&gt;</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">	at expression 'fild.name'</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">	at &lt;value name="field"&gt; .(builder-test-mapping-syntax-25.0.xml:14)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">	at &lt;list name="valueFields"&gt; .(builder-test-mapping-syntax-25.0.xml:8)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">	at &lt;mapping&gt; .(builder-test-mapping-syntax-25.0.xml:2)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Bound variables {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">	/* for-each field in dataElement.fields .(builder-test-mapping-syntax-25.0.xml:10) */</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">	field, __item = FieldComposite{testComp::Country::countryCode}</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">	/* for-each dataElement in dataElements .(builder-test-mapping-syntax-25.0.xml:9) */</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">	dataElement, __item = DataElementComposite{testComp::Country}</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">	/* let dataElements = component.dataElements .(builder-test-mapping-syntax-25.0.xml:4) */</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">	dataElements = [DataElementComposite{testComp::City}, DataElementComposite{testComp::Country}]</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">	component = ComponentComposite{testComp}</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">	at net.democritus.expansion.mapping.ognl.Evaluate.getValue(Evaluate.java:37)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">	at net.democritus.expansion.mapping.ognl.Evaluate.getValue(Evaluate.java:43)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">	...</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="adding-variables-to-the-mapping-context">Adding Variables to the mapping context<a href="https://foundation.stars-end.net/docs/developer-hub/blog/expanders-core-8.1#adding-variables-to-the-mapping-context" class="hash-link" aria-label="Direct link to Adding Variables to the mapping context" title="Direct link to Adding Variables to the mapping context" translate="no">​</a></h3>
<p>If the default variables exposed to the Expanders, like <code>artifactSubFolders</code>, don't do the trick,
it is now possible to define additional variable bindings.</p>
<p><a class="" href="https://foundation.stars-end.net/docs/ecosystem/engineering-solutions/expanders/advanced/expander-variables">Expander Variables</a></p>
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>note</div><div class="admonitionContent_BuS1"><p>This functionality is intended to be used conservatively.</p></div></div>]]></content:encoded>
            <category>releases</category>
            <category>expanders</category>
            <category>mapping</category>
        </item>
        <item>
            <title><![CDATA[Micro Radiant Plugin Expanders 4.0.0]]></title>
            <link>https://foundation.stars-end.net/docs/developer-hub/blog/mr-expanders-4.0.0</link>
            <guid>https://foundation.stars-end.net/docs/developer-hub/blog/mr-expanders-4.0.0</guid>
            <pubDate>Mon, 14 Apr 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Changes and improvements]]></description>
            <content:encoded><![CDATA[<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="changes-and-improvements">Changes and improvements<a href="https://foundation.stars-end.net/docs/developer-hub/blog/mr-expanders-4.0.0#changes-and-improvements" class="hash-link" aria-label="Direct link to Changes and improvements" title="Direct link to Changes and improvements" translate="no">​</a></h2>
<ul>
<li class="">Artifact id has changed to <code>mr-plugin-expanders</code> (see migration guide below).</li>
<li class="">Makes use of new descriptions fields on ElementClass and References to add these descriptions as hints in the plugin.</li>
</ul>
<p>See <a class="" href="https://foundation.stars-end.net/docs/releases/changelog/micro-radiant-expanders">Changelog</a> for the full list of changes.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="migration-guide">Migration guide<a href="https://foundation.stars-end.net/docs/developer-hub/blog/mr-expanders-4.0.0#migration-guide" class="hash-link" aria-label="Direct link to Migration guide" title="Direct link to Migration guide" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="new-artifact-id">New artifact id<a href="https://foundation.stars-end.net/docs/developer-hub/blog/mr-expanders-4.0.0#new-artifact-id" class="hash-link" aria-label="Direct link to New artifact id" title="Direct link to New artifact id" translate="no">​</a></h3>
<p>In 4.0.0, the artifactId of the plugin expanders changes:</p>
<div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">expansionResource</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">net.democritus.editor:editor-model-expanders</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">version</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">3.9.0</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><br></span></code></pre></div></div>
<p>to</p>
<div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">expansionResource</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">net.democritus.editor:mr-plugin-expanders</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">version</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">4.0.0</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><br></span></code></pre></div></div>]]></content:encoded>
            <category>releases</category>
            <category>migration-guide</category>
            <category>micro-radiant</category>
            <category>plugins</category>
        </item>
        <item>
            <title><![CDATA[Angular Expanders 6.0.0]]></title>
            <link>https://foundation.stars-end.net/docs/developer-hub/blog/angular-expanders-6.0.0</link>
            <guid>https://foundation.stars-end.net/docs/developer-hub/blog/angular-expanders-6.0.0</guid>
            <pubDate>Mon, 24 Mar 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Changes and improvements]]></description>
            <content:encoded><![CDATA[<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="changes-and-improvements">Changes and improvements<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-expanders-6.0.0#changes-and-improvements" class="hash-link" aria-label="Direct link to Changes and improvements" title="Direct link to Changes and improvements" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="upgrade-to-angular-19-and-angular-material-19">Upgrade to Angular 19 and Angular Material 19<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-expanders-6.0.0#upgrade-to-angular-19-and-angular-material-19" class="hash-link" aria-label="Direct link to Upgrade to Angular 19 and Angular Material 19" title="Direct link to Upgrade to Angular 19 and Angular Material 19" translate="no">​</a></h3>
<p>For this release we updated all the code to <code>Angular</code> 19, in order to stay up to date with the releases and best practices.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="separation-of-querysearch">Separation of QuerySearch<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-expanders-6.0.0#separation-of-querysearch" class="hash-link" aria-label="Direct link to Separation of QuerySearch" title="Direct link to Separation of QuerySearch" translate="no">​</a></h3>
<p>QuerySearch is now an addon, instead of the default filtering implementation.
Everything related to filtering in the code has been moved to separate <code>expansionResources</code>, namely <code>angular-querysearch-expanders</code>, <code>angular-svcapi-querysearch-expanders</code> and <code>angular-stdapi-querysearch-expanders</code>.
When these <code>expansionResources</code> are not added the application will still function, however the filtering capabilities will not be present.
From now on you can also add filtering implementations, e.g. finders, or provide a custom one.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="yarn-support">Yarn support<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-expanders-6.0.0#yarn-support" class="hash-link" aria-label="Direct link to Yarn support" title="Direct link to Yarn support" translate="no">​</a></h3>
<p>We provide a solution to substitute <code>npm</code> with <code>yarn</code> if wanted. This drastically improves dependencies install times. Substitute the <code>Std API</code> profile with <code>Std API yarn</code> (or Svc) in your <code>expansionSettings.xml</code>.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="harvest-expanders">Harvest expanders<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-expanders-6.0.0#harvest-expanders" class="hash-link" aria-label="Direct link to Harvest expanders" title="Direct link to Harvest expanders" translate="no">​</a></h3>
<p>The <code>angular-expanders</code> now depend on the <code>harvest-expanders:1.0.0</code>, this is an example of one of the first <code>expansionResources</code> that contains reusable expanders. These expanders and expansion steps define the <code>gen/ext</code> less harvesting.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="new-design-implementation">New design implementation<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-expanders-6.0.0#new-design-implementation" class="hash-link" aria-label="Direct link to New design implementation" title="Direct link to New design implementation" translate="no">​</a></h3>
<p>This version contains the new designs made for the list and details page.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="migration-guide">Migration guide<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-expanders-6.0.0#migration-guide" class="hash-link" aria-label="Direct link to Migration guide" title="Direct link to Migration guide" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="upgrade-to-angular-19">Upgrade to Angular 19<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-expanders-6.0.0#upgrade-to-angular-19" class="hash-link" aria-label="Direct link to Upgrade to Angular 19" title="Direct link to Upgrade to Angular 19" translate="no">​</a></h3>
<p>Normally you shouldn't have any issues, you can look at <a href="https://angular.dev/update-guide?v=18.0-19.0&amp;l=3" target="_blank" rel="noopener noreferrer" class="">the migration guide</a> to see what changes in custom code need to be done. The directive option <code>standalone = true</code> has become default, so you can remove this in your custom code if you prefer.</p>
<p>To stay up to date with Angular best practices, we removed the modules and made all the components standalone. This potentially requires some harvest code relocation:</p>
<ul>
<li class="">Declared providers in <code>app.module.ts</code> should be moved to <code>app.config.ts</code>.</li>
<li class="">Declared routes in <code>app-routing.module.ts</code> should be moved to <code>app.routes.ts</code>. Instead of loading the <code>module</code> file, you should now lazy load the <code>routes</code> file.</li>
<li class=""><code>FeatureModule</code> modules are removed.</li>
<li class="">Declared routes in <code>${FeatureModule}-routing.module.ts</code> should be moved to <code>${FeatureModule}.routes.ts</code>.</li>
<li class=""><code>DataView</code> modules are removed. However, the routing module has stayed. This is needed for <code>DataChildren</code>. If you declared providers in <code>${DataView}.module.ts</code>, you should move these to <code>${DataView}-routing.module.ts</code>.</li>
<li class="">The core module has been removed, because all components are standalone. This can be re-added custom if needed.</li>
<li class="">The shared module has been removed, because all components are moved to <code>ngx-ns-runtime</code> and otherwise they would be standalone. This can be re-added custom if needed.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="separation-of-querysearch-1">Separation of QuerySearch<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-expanders-6.0.0#separation-of-querysearch-1" class="hash-link" aria-label="Direct link to Separation of QuerySearch" title="Direct link to Separation of QuerySearch" translate="no">​</a></h3>
<p>To have the application function as before you will need to add following <code>expansionResources</code>:</p>
<ul>
<li class=""><code>angular-querysearch-expanders:6.0.0</code></li>
<li class=""><code>angular-svcapi-querysearch-expanders:2.0.0</code> or <code>angular-stdapi-querysearch-expanders:2.0.0</code></li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="yarn-support-1">Yarn support<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-expanders-6.0.0#yarn-support-1" class="hash-link" aria-label="Direct link to Yarn support" title="Direct link to Yarn support" translate="no">​</a></h3>
<p>You will probably need to install <code>yarn</code> on your machine first to make this work. You should do this via <code>corepack</code>: <code>npm install -g corepack</code>.
After first expansion, you will potentially need to create an empty <code>yarn.lock</code> file, in your expansion folder. Then you can <code>yarn</code> and <code>yarn start</code> to install and start the application.</p>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>Global config</div><div class="admonitionContent_BuS1"><div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC">.yarnrc.yml</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#00a4db">npmScopes</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">nsx</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">npmAlwaysAuth</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean important" style="color:#36acaa">true</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">npmAuthToken</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> &lt;yourTokenHere (same as in .npmrc)</span><span class="token punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">npmRegistryServer</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> &lt;registryServerHere (same as in .npmrc)</span><span class="token punctuation" style="color:#393A34">&gt;</span><br></span></code></pre></div></div></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="harvest-expanders-1">Harvest expanders<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-expanders-6.0.0#harvest-expanders-1" class="hash-link" aria-label="Direct link to Harvest expanders" title="Direct link to Harvest expanders" translate="no">​</a></h3>
<ul>
<li class="">You should move <code>ext</code> code of the <code>AngularApp</code> to a folder <code>src</code>, except the <code>package-lock.json</code> file and other root level files. Otherwise it will expand to the wrong place.</li>
<li class="">If you have other root level files in your project, e.g. <code>.npmrc</code>, you should at this to the custom anchors of the <code>.harvestInclude</code> file, otherwise it will be ignored for harvesting.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="new-design-implementation-1">New design implementation<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-expanders-6.0.0#new-design-implementation-1" class="hash-link" aria-label="Direct link to New design implementation" title="Direct link to New design implementation" translate="no">​</a></h3>
<ul>
<li class="">Details page has been renamed to <code>details-page</code> from <code>details</code> and has been completely changed to fit the static
formless design. You need to rename your harvest files and folders to include the <code>-page</code> part.</li>
<li class="">A <code>details</code> component has been added that is used for the <code>details-page</code> as for the new <code>inspect</code> functionality on
the <code>list-page</code>. The old implementation can be kept as ext to gradually change if wanted. However, we removed the <code>nsx-datepicker</code> and <code>nsx-yes-no-toggle</code> components form the shared module. These need to be re-added custom as well then.</li>
<li class="">List page has been renamed to <code>list-page</code> from <code>list</code>. You need to rename your harvest files and folders to include the <code>-page</code> part.</li>
<li class="">The list page has been changed to use the new button implementation and also includes an inspect feature to get an overview of the details. There are only visual breaking changes here, custom code should still function.</li>
<li class="">Removed <code>changes</code> and <code>destroy</code> anchors, this needs to be moved to the <code>methods</code> anchor.</li>
<li class="">Refactor of all the buttons in the application to <code>nsc-button</code>, also removed the theme <code>include</code> of the <code>material.button</code>. This should be re-added as harvest code if needed.</li>
<li class="">Titles of <code>details</code> and <code>list</code> page are now translated completely.</li>
<li class="">Moved <code>dialog.service</code> to <code>ngx-ns-core</code> as well as the <code>ConfirmationDialog</code> component. Custom code should switch to this implementation.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="data-accessservice">Data-access.service<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-expanders-6.0.0#data-accessservice" class="hash-link" aria-label="Direct link to Data-access.service" title="Direct link to Data-access.service" translate="no">​</a></h3>
<p>In the <code>data-access.service</code> files, the name of the old "generic" <code>segmentParameterMapper</code> is changed to a <code>element</code>
specific one, usage of this mapper in custom code needs to be updated.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="removed-legacy-forms">Removed legacy forms<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-expanders-6.0.0#removed-legacy-forms" class="hash-link" aria-label="Direct link to Removed legacy forms" title="Direct link to Removed legacy forms" translate="no">​</a></h3>
<p>The legacy forms are no longer supported and you should update to the new form structure.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="nsxngx-ns-core">@nsx/ngx-ns-core<a href="https://foundation.stars-end.net/docs/developer-hub/blog/angular-expanders-6.0.0#nsxngx-ns-core" class="hash-link" aria-label="Direct link to @nsx/ngx-ns-core" title="Direct link to @nsx/ngx-ns-core" translate="no">​</a></h3>
<ul>
<li class="">CSS variables name-change in sidebar:</li>
</ul>
<div class="container"><div class="row"><div class="col col--6"><div class="language-css codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC">before</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-css codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token variable" style="color:#36acaa">--nsc-sidebar-menu-custom-return-header-background-color</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token variable" style="color:#36acaa">--nsc-sidebar-menu-custom-return-header-background-color-hover</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token variable" style="color:#36acaa">--nsc-sidebar-menu-custom-return-header-color</span><br></span></code></pre></div></div></div><div class="col col--6"><div class="language-css codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC">after</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-css codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token variable" style="color:#36acaa">--nsc-sidebar-menu-custom-single-level-return-icon-background-color</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token variable" style="color:#36acaa">--nsc-sidebar-menu-custom-single-level-return-icon-hover-background-color</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token variable" style="color:#36acaa">--nsc-sidebar-menu-custom-single-level-return-icon-fill-color</span><br></span></code></pre></div></div></div></div></div>
<ul>
<li class=""><code>searchKey</code> attribute has been removed from <code>&lt;nsc-select&gt;</code> components, this needs to be removed in custom html.
Filtering has been moved to the <code>dataSource</code> implementation for the select components.</li>
</ul>]]></content:encoded>
            <category>releases</category>
            <category>migration-guide</category>
            <category>angular-expanders</category>
        </item>
        <item>
            <title><![CDATA[Prime Core 2025.0.0]]></title>
            <link>https://foundation.stars-end.net/docs/developer-hub/blog/prime-core-2025.0.0</link>
            <guid>https://foundation.stars-end.net/docs/developer-hub/blog/prime-core-2025.0.0</guid>
            <pubDate>Mon, 24 Mar 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[Symbiotic Dependencies]]></description>
            <content:encoded><![CDATA[<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="symbiotic-dependencies">Symbiotic Dependencies<a href="https://foundation.stars-end.net/docs/developer-hub/blog/prime-core-2025.0.0#symbiotic-dependencies" class="hash-link" aria-label="Direct link to Symbiotic Dependencies" title="Direct link to Symbiotic Dependencies" translate="no">​</a></h2>
<p>With prime-core 2025.0.0, expansion-resources can define symbiotic dependencies.
These dependencies are not included automatically, but only in case a number of other expansion-resources are present.
This allows expander developers to create resources that provide integration with other expander beams.</p>
<!-- -->
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="how-it-works">How it works<a href="https://foundation.stars-end.net/docs/developer-hub/blog/prime-core-2025.0.0#how-it-works" class="hash-link" aria-label="Direct link to How it works" title="Direct link to How it works" translate="no">​</a></h3>
<p>Several expander projects have 1 goal, but multiple expansion-resources.
This setup exists to support integration with specific use-cases without introducing hard dependencies.</p>
<p>E.g. enum-type-expanders has separate resources for integration with angular and rest.</p>
<ul>
<li class=""><code>net.democritus.experimental.enumtypes:enum-type-expanders</code></li>
<li class=""><code>net.democritus.experimental.enumtypes:enum-type-rest-expanders</code></li>
<li class=""><code>net.democritus.experimental.enumtypes:enum-type-angular-expanders</code></li>
</ul>
<p>However, this means that the expansionSettings become more complex:</p>
<div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">expansionSettings</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">expansionResources</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">expansionResource</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">net.democritus:angular-svcapi-stack</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">version</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">1.4.0</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">expansionResource</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">net.democritus.experimental.enumtypes:enum-type-expanders</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">version</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">0.4.2</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">expansionResource</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">net.democritus.experimental.enumtypes:enum-type-rest-expanders</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">version</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">0.4.2</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">expansionResource</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">name</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">net.democritus.experimental.enumtypes:enum-type-angular-expanders</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">version</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">0.4.2</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">expansionResources</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">expansionSettings</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></span></code></pre></div></div>
<p>Symbiotic dependencies are only included if all of their dependencies are included by other expansion-resources.</p>
<p>In this case, an <code>enum-type-beam</code> expansion-resource can add <code>enum-type-rest-expanders</code> and <code>enum-type-angular-expanders</code>
as symbiotic dependencies.
When used with rest-expanders, <code>enum-type-rest-expanders</code> will be included.
When used with angular-expanders, <code>enum-type-angular-expanders</code> will be included.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="usage">Usage<a href="https://foundation.stars-end.net/docs/developer-hub/blog/prime-core-2025.0.0#usage" class="hash-link" aria-label="Direct link to Usage" title="Direct link to Usage" translate="no">​</a></h3>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionContent_BuS1"><p>Requires expanders-maven-plugin 2025.1.0 or newer.</p></div></div>
<p>To create a symbiotic dependency, add the dependency to your maven <code>pom.xml</code>.
Then, configure the dependency in the <code>expanders-maven-plugin</code> configuration.</p>
<div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">plugin</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">groupId</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">net.democritus.maven.plugins</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">groupId</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">artifactId</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">expanders-maven-plugin</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">artifactId</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">executions</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">execution</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">goals</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">goal</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">expansionResource</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">goal</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">goals</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">configuration</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">symbioticDependencies</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">dependency</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">groupId</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">net.democritus.experimental.enumtypes</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">groupId</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">artifactId</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">enum-type-angular-expanders</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">artifactId</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">dependency</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">dependency</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">groupId</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">net.democritus.experimental.enumtypes</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">groupId</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag" style="color:#00009f">artifactId</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain">enum-type-rest-expanders</span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">artifactId</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">dependency</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">symbioticDependencies</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">configuration</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">execution</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">executions</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag" style="color:#00009f">plugin</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></span></code></pre></div></div>]]></content:encoded>
            <category>releases</category>
            <category>prime-core</category>
            <category>expanders-maven-plugin</category>
            <category>symbiotic-dependencies</category>
        </item>
    </channel>
</rss>