Monorepo for minted: pure-Dart value types for the values you'd usually keep in a String and
hope for the best. Built on parse, don't validate, so the parser is the only door in and anything
that came through it is well-formed by construction.
| Package | What it holds | pub.dev |
|---|---|---|
minted |
Core: ParseOutcome, MintedFailure, MintedFormatError |
|
minted_chronology |
Date, Year, Month, DayOfMonth, Weekday, Iso8601Duration |
|
minted_constraints |
Digit, Digits, the Uint family, Char, Letter, Ascii* |
|
minted_contact |
Email, PhoneNumber |
|
minted_finance |
Iban, Bic, Isin, PaymentCardNumber |
|
minted_geography |
GeoCoordinate, GeoBounds, Geohash, PlusCode, ShortPlusCode |
|
minted_identifiers |
Uuid, Isbn, Issn, Isni, Imei, Gtin |
|
minted_network |
IpAddress, Cidr, Hostname, DnsName, MacAddress, Port |
Take only the domains you use: nothing drags in another domain's engine. A minted_chronology
consumer resolves collection and meta, and the phone engine arrives only if you ask for
minted_contact. There is also a private minted_conformance member holding the suites that sweep
across packages, which never ships.
The siblings landed with minted 3.0.0 and the primitives followed in 3.1.0, leaving minted the
outcome vocabulary alone. Each package's CHANGELOG carries its own cutovers.
packages/minted/README.md is the documentation you actually
want: the pub.dev landing page, with the type catalogue and usage guide. This file is the map.
It is a pub workspace: one resolution, one root
pubspec.lock, shared by every member.
dart pub get # once at the root, resolves every member
dart run melos run # lists what you can run
dart run melos run test # every member's suite, fanned outMelos saves you remembering which commands are workspace-wide and
which are per-package: analyze and format run once at the root, test and coverage fan out.
Plain commands work too, but mind the split: analyze and format want the root, while anything
reading one pubspec (dart test, cider, dart pub publish) wants packages/minted.
Contributor docs live at the root because they cover every package: AGENTS.md for hard rules and repo layout, CODESTYLE.md for style, and APPENDIX.md for why things are the way they are.
A release starts from the Actions tab: Release, then the package and the bump. It runs CI first, and raises the other packages' bounds on the one going out. dartender's Releasing has the rest.
A new package's first version
pub.dev only sets up automated publishing for a package that's already there, and a release always bumps, so the first version goes up by hand:
cd packages/<name> && cider release, so the CHANGELOG names the version, then commit it. Check the notes read right for a first release, since a PR's label lands in every package it touched.dart pub -C packages/<name> publish.- Set its tag pattern to
<name>-{{version}}underpub.dev/packages/<name>/admin. - Tag that version
<name>-<version>and push the tag, since the next release counts from it. The publish run it starts fails on a version pub.dev already has, and nothing waits on it.