# SimplyCode packages
De wens is om componenten over meerdere projecten en personen te kunnen delen. Dit moet op een open en uitbreidbare manier geimplementeerd worden. Hierbij een mogelijke opzet.
SimplyCode krijgt een package repository optie. Daar kun je een git repository URL opgeven. SimplyCode haalt deze repositories op en uit de metadata wordt een pagina opgebouwd waar je naar componenten kunt zoeken. Als je een component selecteert wordt deze met git opgehaald en toegevoegd aan je project.
De package repository moet een standaard formaat hebben. Bijvoorbeeld:

Verder uitgewerkt:
- `/packages.json`
bevat een lijst met welke packages er bestaan
```json
{
"name": "foo repository",
"packages": [
"foo"
]
}
```
- `/README.md`
een introductie van deze package repository
kan linken naar andere pagina's
- `/package-naam/`
directory naam moet in de packages.json genoemd staan
- `/package-naam/package.json`
```json
{
"name":"foo",
"org":"muze.nl",
"git":"//github.com/muze-nl/foo/",
"branch":"main",
"version": "HEAD",
"license": {
"name": "MIT",
"link": "//github.com/muze-nl/foo/LICENSE"
},
"author": "auke@muze.nl",
"components": [
"bar", "baz"
]
}
```
- `/package-naam/README.md`
een introductie van deze package
- `/package-naam/component-naam/component.json`
```json
{
"name": "bar",
"description": "Korte omschrijving op 1 regel",
"path": "component/bar/"
}
```
- `/package-naame/component-naam/README.md`
een beschrijving van dit component
Een package git repo kan op deze manier ingedeeld worden zoals je wil, alle informatie om een component op te halen staat in de packages repository.
Als een component dependencies heeft op npm packages, dan moet de component of de package zelf een package.json bevatten. Dan kan SimplyCode dat in de build stap meenemen.
Het enige wat nog opgelost moet worden is hoe we een component opnemen die naar een andere component in hetzelfde package refereert. Als we dit niet automatisch kunnen detecteren dan moet dat expliciet gemaakt worden, het liefst in de meta.json van de component.
Ik denk dat de README.md optioneel zijn, maar geeft de mogelijkheid om uitgebreidere documentatie in de package repository op te nemen zonder dat je direct naar de github/gitlab pagina's hoeft te linken. Geeft ook de optie om andere git urls te ondersteunen.
Om een component of package toe te voegen aan de packages repository kun je simpelweg een merge request sturen.
SimplyCode haalt voor een component altijd de hele package op. De gekozen component wordt opgenomen als ofwel een symlink ofwel een mapje met een meta.json die alsnog naar de juiste plek op disk verwijst.
Door de hele package op te halen kun je in een component andere componenten uit de package gebruiken. Ik denk dat we voor de duidelijkheid deze componenten ook in SimplyCode expliciet toe moeten voegen.