Doel
Op dit moment worden de NL Design System stijlen (design tokens en
component library CSS) geladen vanuit de strapi-tiptap-editor plugin.
Dit is niet de juiste plek, omdat elke plugin die stijlen nodig heeft
ze apart moet laden.
Het plan is om de stijlen te verplaatsen naar een aparte plugin:
strapi-plugin-nl-design-system. Zo worden de stijlen maar één keer
geladen, ongeacht hoeveel plugins ze gebruiken.
Wat moet er gebeuren
- Maak een nieuwe plugin aan:
strapi-plugin-nl-design-system
- Verplaats de volgende CSS-imports naartoe:
import '@utrecht/component-library-css';
import '@utrecht/design-tokens/dist/dark/index.css';
import '@utrecht/component-library-css/dist/html.css';
import '@utrecht/design-tokens/dist/index.css';
- Verwijder deze imports uit
strapi-tiptap-editor
- Verwijder het postbuild-script
scripts/inject-css.mjs uit
strapi-tiptap-editor — dit was een tijdelijke oplossing die
niet meer nodig is zodra de stijlen in een eigen plugin zitten
- Voeg
strapi-plugin-nl-design-system toe als vereiste plugin
in de Strapi-projecten die NL Design System gebruiken
Waarom
- Stijlen worden nu maar één keer geladen, ook als meerdere plugins
ze nodig hebben
- De verantwoordelijkheid voor de stijlen ligt op de juiste plek
- De tijdelijke workaround in
strapi-tiptap-editor kan worden opgeruimd
Bekende kwetsbaarheid in de tijdelijke oplossing
Het huidige postbuild-script (scripts/inject-css.mjs) escaped de CSS
handmatig met twee reguliere expressies:
.replace(/`/g, '\\`')
.replace(/\$\{/g, '\\${');
Dit dekt de meeste gevallen, maar mist backslashes en </script>-sequenties.
Een veiligere oplossing is het npm-pakket
string-to-template-literal:
import stringToTemplateLiteral from 'string-to-template-literal';
const injector = `;(function () {
var style = document.createElement("style");
style.textContent = ${stringToTemplateLiteral(css)};
document.head.appendChild(style);
})();`;
Dit pakket is 5 regels code, heeft geen afhankelijkheden en valt onder de
0BSD-licentie. Het is ook mogelijk de functie direct te kopiëren in het
script om een extra dependency te vermijden.
Dit is alleen relevant zolang de tijdelijke oplossing nog in gebruik is.
Zodra de stijlen zijn verplaatst naar strapi-plugin-nl-design-system
vervalt dit punt.
Doel
Op dit moment worden de NL Design System stijlen (design tokens en
component library CSS) geladen vanuit de
strapi-tiptap-editorplugin.Dit is niet de juiste plek, omdat elke plugin die stijlen nodig heeft
ze apart moet laden.
Het plan is om de stijlen te verplaatsen naar een aparte plugin:
strapi-plugin-nl-design-system. Zo worden de stijlen maar één keergeladen, ongeacht hoeveel plugins ze gebruiken.
Wat moet er gebeuren
strapi-plugin-nl-design-systemstrapi-tiptap-editorscripts/inject-css.mjsuitstrapi-tiptap-editor— dit was een tijdelijke oplossing dieniet meer nodig is zodra de stijlen in een eigen plugin zitten
strapi-plugin-nl-design-systemtoe als vereiste pluginin de Strapi-projecten die NL Design System gebruiken
Waarom
ze nodig hebben
strapi-tiptap-editorkan worden opgeruimdBekende kwetsbaarheid in de tijdelijke oplossing
Het huidige postbuild-script (
scripts/inject-css.mjs) escaped de CSShandmatig met twee reguliere expressies:
Dit dekt de meeste gevallen, maar mist backslashes en
</script>-sequenties.Een veiligere oplossing is het npm-pakket
string-to-template-literal:Dit pakket is 5 regels code, heeft geen afhankelijkheden en valt onder de
0BSD-licentie. Het is ook mogelijk de functie direct te kopiëren in het
script om een extra dependency te vermijden.
Dit is alleen relevant zolang de tijdelijke oplossing nog in gebruik is.
Zodra de stijlen zijn verplaatst naar
strapi-plugin-nl-design-systemvervalt dit punt.