← All showcases
ideasets as public APIMonorepo architecture
modularityimportsideasets

A module's published surface

billing exports an ideaset. checkout imports only that. Reaching past the boundary is an error.

An ideaset is the module's published surface - not its internals.

billing/interface.rq

charge {
  capture payment for a checkout total
  implemented in ["./src/billing/charge.ts".charge]
  @status done
}

refund_policy {
  refunds within 30 days require original charge id
  @status done
}

// internals - not in the published surface
ledger_posting {
  double-entry write after capture
  @status done
}

billing_api (
  charge,
  refund_policy
)

checkout/checkout.rq

import "../billing/interface.rq" as billing

checkout {
  must call [billing.charge] after session is valid
  refunds follow [billing.refund_policy]
  @status done
}

reaching past the boundary

errorCould not resolve reference to IdeaDeclaration named 'ledger_posting'.

  • Import from a file that exports ledger_posting
  • Add ledger_posting to billing_api
  • Create the missing idea