Gedeelde TypeScript-package (@passly-nl/data) met API-types en service
classes voor het Passly platform. Wordt geconsumeerd door frontend
en (potentieel) andere clients. Pure transport-laag — geen UI, geen state.
- TypeScript + Bun (package manager + scripts).
tsdown— build naardist/index.mjs+dist/index.d.mts.@basmilius/http-client— HTTP-laag (BaseService,QueryString,BaseResponse,Paginated).luxon—DateTime.@flux-ui/types— gedeelde type-shapes (FluxFormSelectEntry,FluxFilterOptionRow).
src/
├── adapter/ # raw JSON → DTO transformers (per domein)
├── dto/ # @dto decorated classes met getters/setters
├── service/ # HTTP-services per resource (extends BaseService)
├── types/ # pure TypeScript type-unions + enums
├── util/ # helpers (optional, emptyNull, jsonBlob, buildListQuery, ...)
└── index.ts # re-exports
.editorconfig: 4 spaces, LF, UTF-8, final newline.- Imports: scoped namespaces (
#data/types,#data/adapter, …) via"imports"inpackage.json. - Enums: type unions (
type OrderRefundStatus = 'not_refunded' | ...), niet TypeScriptenum. - Services:
export class XxxService extends BaseServicemetasync-methods dieBaseResponse<...>retourneren. - Adapters:
XxxAdapter.parseXxx(raw): XxxDto— exporteert via een class met static methods. - Default exports voor util-files; named exports voor services en types.
bun run build—tsgo --noEmit && tsdown. Dit is het enige safety net.bun run dev—tsdown --watch.- Geen tests in dit project; type-check + downstream consumers zijn de garantie.
- Filters & zoeken voor lijst-services —
docs/filters.md. Patroon voorListParams/Filterstypes, debuildListQueryhelper, en degetSelectOptionsconventie voor async filter-UI's.
backendconsumeert dit pakket nooit, maar de API-contracten hier moeten matchen met wat de backend serveert. Wijzigingen aan service- signatures of DTO-shapes coördineren met backend.frontendconsumeert dit pakket via npm; bij lokale dev kun je via een file/link-dependency direct testen. Na breaking changes hier altijdbun run buildin frontend om type-issues te vangen.