Releases: linyows/jmapc
Release list
v0.12.0
Breaking changes
- A record type is named after the call that read it.
ListInboxEmailsEmail
isListInboxEmailsFetchEmail, after the call idfetch. The types were
numbered by the position of the call, so inserting a call moved a name onto a
different shape, which the build reported only where the two shapes differed
enough to stop compiling. Every generated record type is renamed by this, in
Go, Rust and TypeScript. (#64) - The filter of a
/queryis a typed union rather thanany. It is a
FilterOperatorOrEmailFilterCondition, a struct with one field per shape, of
which exactly one is set. Code that built a/queryor/queryChanges
arguments struct by hand has to name the shape it is passing.
(#58)
Added
WithObserverreports what the client does, for logging, metrics and
tracing. Three hooks that nest: one JMAP request, each HTTP request under it,
and each delay for a concurrency slot or before a retry.SlogObserver
writes them to aslog.Logger, and the hooks return the context their work
runs under, so a tracer can nest its spans the same way. Nothing depends on
OpenTelemetry. (#59)WithTokenSourceauthenticates with a token that expires. The client
calls the source when it has no token, shortly before the one it holds
expires, and when a server answers 401; requests arriving together share one
call, since some servers accept a refresh token only once. A 401 sends that
one request again, once, with a newly fetched token.
(#61)WithSplitGetssends a/getholding more ids thanmaxObjectsInGetin
several requests and joins the answers into one response. It is off by
default: the round trips multiply, and the records are no longer one
snapshot, so astatethat differs between requests is reported as a
*StateChangedalongside the joined response.
(#62)- A blob download can ask for part of a blob.
DownloadOptions.Fromand
Lengthare sent as an HTTPRange, which is how a download interrupted
part way is resumed, andBlob.Rangereports what came back. A server that
ignores the range fails the download rather than returning the whole blob to
a caller writing at an offset.
(#63) - The CLI help opens with a banner: the name in ASCII, in green, and under
it one line saying what jmapc is and where it lives. Neither is coloured
where the output is not a terminal orNO_COLORis set.
(#65)
Documentation
- The prose was rewritten in plain English. It attributed intent and speech
to programs — a client "asking to be refused", a server "telling the caller
to come back later" — which is not how technical documentation reads. The
README, the package documentation, the comments, and the documentation the
generator writes into every generated client all state what happens instead.
(#60) - The three languages are listed in one order everywhere, Go, Rust,
TypeScript, including the order the README's sections come in.
(#66)
Install
The generator is a Go tool, and what it generates is Go, so the usual way is to
record it in the module that uses it:
go get -tool github.com/linyows/jmapc/cmd/jmapc@v0.12.0
Binaries are attached below for anyone without a Go toolchain.
v0.11.0
Changelog
Changes
Install
The generator is a Go tool, and what it generates is Go, so the usual way
is to record it in the module that uses it:
go get -tool github.com/linyows/jmapc/cmd/jmapc@v0.11.0
Binaries are attached below for anyone without a Go toolchain.
v0.10.0
Changelog
Changes
Install
The generator is a Go tool, and what it generates is Go, so the usual way
is to record it in the module that uses it:
go get -tool github.com/linyows/jmapc/cmd/jmapc@v0.10.0
Binaries are attached below for anyone without a Go toolchain.
v0.9.0
Changelog
Changes
- f76717a: Give a creation id a name in code (@linyows)
- 48e0400: Name the capability an account comes from (@linyows)
Install
The generator is a Go tool, and what it generates is Go, so the usual way
is to record it in the module that uses it:
go get -tool github.com/linyows/jmapc/cmd/jmapc@v0.9.0
Binaries are attached below for anyone without a Go toolchain.
v0.8.0
Changelog
Changes
- d0b86db: Hand back what answered in Rust too (@linyows)
- c3c6830: Hand back what answered in TypeScript too (@linyows)
- 0bf6e1e: Hand back what the server did answer (@linyows)
- 10fe0b5: Serve the test server where a client already looks (@linyows)
Install
The generator is a Go tool, and what it generates is Go, so the usual way
is to record it in the module that uses it:
go get -tool github.com/linyows/jmapc/cmd/jmapc@v0.8.0
Binaries are attached below for anyone without a Go toolchain.
v0.7.0
Changelog
Changes
- 1353fee: Clear what the release run warned about (@linyows)
- 3f44ca2: Give one shape one type (@linyows)
- 5d5fc63: Let a half-converted client share the test server (@linyows)
- 916b639: Name the Node the checks run on (@linyows)
- 8aa5443: Pin the actions to the commits they are today (@linyows)
- b5ab13e: Refuse the leading slash a patch key already has (@linyows)
- e965d56: Report the same query under two names (@linyows)
- ee212cb: Say what one element of a list is (@linyows)
Install
The generator is a Go tool, and what it generates is Go, so the usual way
is to record it in the module that uses it:
go get -tool github.com/linyows/jmapc/cmd/jmapc@v0.7.0
Binaries are attached below for anyone without a Go toolchain.
v0.6.0
Changelog
Changes
- 8098593: Check the queries against the server they will run against (@linyows)
- b83548d: Describe the query files to an editor (@linyows)
- 08032d9: Follow a type's changes (@linyows)
- 6fa3d08: Let WithAPIURL skip the apiUrl check (@linyows)
- c2f5423: Let an argument be left out (@linyows)
- b7596f5: Let errors.As reach a SetError (@linyows)
- 068fabd: Resolve a relative apiUrl against the session URL (@linyows)
- 2ade77d: Restructure the READMEs and clarify the paging section (@linyows)
- 56dff27: Run a query without generating a client for it (@linyows)
- 611eaa6: Say when a session lists no capabilities at all (@linyows)
- 73a26e4: Say which call ids a response did carry (@linyows)
- 598e84d: Say which way the arity trade-off was decided (@linyows)
- 5ecb096: Say who the released binaries are for (@linyows)
- 37b84e5: Ship the server to test a client against (@linyows)
- ebf590f: Smooth out a few rough sentences in both READMEs (@linyows)
- 1526269: Tone down an overstated claim about JMAP's core idea (@linyows)
- 515a44c: Wait where the server says not now (@linyows)
- a2ecd45: Walk what does not fit in one request (@linyows)
Install
The generator is a Go tool, and what it generates is Go, so the usual way
is to record it in the module that uses it:
go get -tool github.com/linyows/jmapc/cmd/jmapc@v0.6.0
Binaries are attached below for anyone without a Go toolchain.
v0.5.0
Changelog
Changes
- 024dd45: Generate Rust alongside Go and TypeScript (@linyows)
- 6072741: Say how a query's file name settles the generated names (@linyows)
- 2b6294c: Scan for security problems in CI, and stop leaking a URL's userinfo (@linyows)
- ea2fa9a: Share the parts of generation that both languages decide alike (@linyows)
- 9ea8382: Test the shared parts of generation directly (@linyows)
Install
The generator is a Go tool, and what it generates is Go, so the usual way
is to record it in the module that uses it:
go get -tool github.com/linyows/jmapc/cmd/jmapc@v0.5.0
Binaries are attached below for anyone without a Go toolchain.
v0.4.0
Changelog
Changes
- e54797b: Drop one more explanation the reader did not ask for (@linyows)
- b356aa7: Fix three things the README got wrong (@linyows)
- 478b879: Give the capability table a header and a mark (@linyows)
- 0ede28e: Head the opening section Motivation (@linyows)
- 8d0c968: Let the TypeScript client send headers of its own (@linyows)
- 5be0a96: Name jmapc where the Motivation section said "the tool" (@linyows)
- 83b1066: Report the records a /set refused (@linyows)
- c35d1cf: Say what the reader gets, in the order they would ask (@linyows)
- 3e56601: Write capability in katakana in the Japanese README (@linyows)
Install
The generator is a Go tool, and what it generates is Go, so the usual way
is to record it in the module that uses it:
go get -tool github.com/linyows/jmapc/cmd/jmapc@v0.4.0
Binaries are attached below for anyone without a Go toolchain.
v0.3.0
Changelog
Changes
- e743138: Check the generated TypeScript in CI, and document it (@linyows)
- 0a7b6fe: Generate TypeScript (@linyows)
- 283a3ea: Separate the names a query uses from the language that spells them (@linyows)
Install
The generator is a Go tool, and what it generates is Go, so the usual way
is to record it in the module that uses it:
go get -tool github.com/linyows/jmapc/cmd/jmapc@v0.3.0
Binaries are attached below for anyone without a Go toolchain.