Skip to content

Verplaats NL Design System stijlen naar een aparte Strapi custom plugin #1428

@AliKdhim87

Description

@AliKdhim87

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

  1. Maak een nieuwe plugin aan: strapi-plugin-nl-design-system
  2. 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';
  1. Verwijder deze imports uit strapi-tiptap-editor
  2. 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
  3. 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.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions