Releases: danfuzz/lactoserv
v0.7.6
Summer stability! This is the first stable release of the v0.7.* series. The
current plan is to let v0.7.* be the main release series for the next several
months, letting downstream projects use it more or less as-is for a while... and
offer feedback, if they are so inspired, to help drive the next major round of
development.
Breaking changes:
- None.
Other notable changes:
net-util
:- Minor fixes to hostname / IP address parsing.
webapp-core
:- Exported
NetworkHost
, which was supposed to have been public since day
one.
- Exported
- testing:
- Added more unit tests.
- Fixed a handful of bugs that cropped up from the effort (all minor).
v0.7.5
Is it stable? Assuming no major problems in the next week or so, the next
release will be a nearly-no-changes one and will be declared the first stable
release of the v0.7.* series.
Breaking changes:
- framework development:
- Moved testing-related module exports into submodules named
<name>/testing
.
- Moved testing-related module exports into submodules named
Other notable changes:
- testing:
- Added more unit tests.
- Fixed a handful of bugs that cropped up from the effort (all minor).
v0.7.4
Breaking changes:
- None.
Other notable changes:
net-util
:- Found a major problem with the
pem
module (one of our few direct
dependencies). Replaced it withselfsigned
, which -- bonus! -- unlike
pem
does not rely on an OS-installed OpenSSL, thereby simplifying our
installation requirements.
- Found a major problem with the
- testing: Added more unit tests.
v0.7.3
Breaking changes:
data-values
:- Made it so that all instances of
BaseStruct
are frozen. This had been
intended all along, but was overlooked in the implementation until now.
- Made it so that all instances of
metacomp
:- Distilled all the static
make*Proxy()
methods onBaseProxyHandler
down
to just a single options-takingmakeProxy()
.
- Distilled all the static
Other notable changes:
- Stopped complaining if run with Node v22.
- configuration /
webapp-builtins
:- Added
dispatchLogging
configuration toendpoint
entries (class
NetworkEndpoint
). DataRateLimiter
: AddedverboseLogging
option, off by default, to make it
possible to log the major stuff without getting a lot ofwriting(1234)
type messages.PathRouter
: Made it possible to cut off fallback search by explicitly
binding a path tonull
.
- Added
compy
:- New method
BaseComponent._prot_addAll()
, for multiple children. - Made it possible for a component to add children before it is initialized.
- New method
data-values
:- Add to
Converter
the ability to configure how to encode proxies.
- Add to
- testing:
- With apologies to Goodhart's Law... Wrote a bunch of unit tests to cover
notable gaps, based on the coverage report.
- With apologies to Goodhart's Law... Wrote a bunch of unit tests to cover
v0.7.2
This release contains most (if not all) of the breaking changes when using the
system as a framework (i.e., building an app and not just running a static web
server) that are currently anticipated for the v0.7.* release series. The hope
is that v0.7.* will reach stability relatively soon.
Breaking changes:
- configuration /
webapp-builtins
:- Changed
MemoryMonitor
to useByteCount
s for the limit configuration. - Changed the file rotation / preservation configurations that had been plain
numbers to instead beByteCount
s.
- Changed
compy
:- Reworked how component classes define their configuration properties, to
be way more ergonomic, avoiding a lot of formerly-required boilerplate and
adding a modicum of error checking that all components get "for free."
Note: While this is a breaking change for how components are built, it
doesn't affect how components are instantiated. For example, this doesn't
make you change your standalone config files. - Similarly, reworked the component lifecycle methods to all be "must call
super
" instead of the former "must not callsuper
" style. The latter
stopped making sense with the introduction of the template mixin classes. - New base class
BaseRootComponent
to be the superclass for root components. - Switched a few classes from base classes to template classes:
BaseThreadComponent
->TemplThreadComponent
.BaseAggregateComponent
->TemplAggregateComponent
.BaseWrappedHierarchy
->TemplWrappedHierarchy
.
- New exported classes to help with testing:
MockComponent
and
MockRootComponent
.
- Reworked how component classes define their configuration properties, to
data-values
:- Renamed
Struct
->Sexp
, because it's really this project's version of
the "sexp" concept. And for similar reasons, renamed thetype
field of it
tofunctor
. This rename also makes room for the newStruct
-y thing. - Moved
BaseConfig
here fromcompy
. - New class
BaseStruct
, extracted fromBaseConfig
, because most of what
BaseConfig
did was not particularly specific to configuration, per se.
- Renamed
Other notable changes:
- configuration:
- New top-level (
WebappRoot
) configurationlogging
, to do fine-grained
control over which components produce system logs. - New per-application and per-service configuration
dispatchLogging
to
specifically enable/disable dispatch-related logging. These logs can be
very chatty, and only rarely useful (though not totally useless).
- New top-level (
compy
:- Fixed bug in
BaseComponent.CONFIG_CLASS
which caused it to sometimes
call base classes'_impl_configClass()
multiple times (which isn't
supposed to happen, ever).
- Fixed bug in
webapp-builtins
:- Took advantage of
TemplThreadComponent
in a few classes that could use it,
now that it's a template (and not a direct subclass ofBaseComponent
).
- Took advantage of
v0.7.1
This release contains most (if not all) of the breaking changes to standalone
configuration that are currently anticipated for the v0.7.* release series.
Note: v0.7.0 wasn't announced widely, because it was mostly just a clone
of v0.6.16.
Breaking changes:
- configuration /
webapp-builtins
:- Totally reworked rate limiting. There is now a separate class per thing that
can be rate-limited --ConnectionRateLimiter
,DataRateLimiter
, and
RequestRateLimiter
-- and configuration uses unit quantity classes for all
the token bucket stuff.
- Totally reworked rate limiting. There is now a separate class per thing that
async
/webapp-util
:- Moved
TokenBucket
fromasync
towebapp-util
. It was the only
not-particularly-simple class inasync
, and its placement in that module
had become the source of a module dependency cycle. - Renamed
IntfThreadlike
toIntfThread
. - Made
EventSink
implementIntfThread
.
- Moved
clocky
/clocks
:- Renamed module to
clocky
, to harmonize with the other*y
modules.
- Renamed module to
collections
:- Renamed classes to be more sensible:
TreePathMap
->TreeMap
, and
TreePathKey
->PathKey
.
- Renamed classes to be more sensible:
data-values
:- Filled out the comparison methods in
Moment
, and made them match the ones
added toUnitQuantity
(see below). - Reworked
UnitQuantity.parse()
, with much more straightforward
functionality, including the addition of optional unit conversions.
- Filled out the comparison methods in
loggy-intf
:- Removed
FormatUtils.byteStringFrom()
in favor of
ByteCount.stringFromByteCount()
(see below).
- Removed
Other notable changes:
clocky
:- Added
waitFor()
to the interfaceIntfTimeSource
. - Extracted
MockTimeSource
fromTokenBucket.test.js
, for use throughout
the system.
- Added
compy
:- New classes
BaseWrappedHierarchy
andBaseThreadComponent
.
- New classes
data-values
:- Added comparison methods to
UnitQuantity
. - New classes
ByteCount
andByteRate
, both unit quantities.
- Added comparison methods to
webapp-builtins
:- New applications
RequestDelay
andSuffixRouter
.
- New applications
v0.7.0
v0.6.16
v0.6.15
Are we there yet?: This release will probably be declared stable, unless
something surprising (and unfortunate) happens within a couple days of its
release.
Breaking changes:
compy
/compote
:- Renamed module
compote
tocompy
, to harmonize withloggy
andtypey
. - Combined all the config base classes into the base-base class
BaseConfig
.
The other classes weren't really serving much of a purpose, and to the
extent that they were, it didn't help that they were separate from the main
base class. - The component hierarchy is now tracked as a unified
TreePathMap
, and
getComponent()
now takes absolute paths instead of simple names. - Got rid of the
isReload
argument to all theinit()
andstart()
(and
related) methods. - Got rid of
IntfComponent
(merged its docs back intoBaseComponent
), as
it only ever existed to break a circular dependency, but that was better
achieved by using a forward-declaration@typedef
.
- Renamed module
host
/webapp-util
:- Moved
BaseSystem
fromwebapp-util
tohost
. - Reworked the
BaseSystem
subclass-implementation API to be a lot simpler.
This was made possible by the recent work on thecompy
module. - Reworked
BaseSystem
to be a root component (not just some-random-object).
- Moved
Other notable changes:
compy
:- New method
BaseComponent._prot_addChild()
, to simplify adding children. - New method
BaseComponent.whenStopped()
. - New abstract class
BaseAggregateComponent
, for components that publicly
allow children to be added.
- New method
webapp-core
:- Used
BaseAggregateComponent
to simplify the classes that are in fact
aggregate components.
- Used
v0.6.14
Nearing stability: This might (but will not necessarily) be the last unstable
release in the v0.6 series, before declaring v0.6 stable.
Breaking changes:
async
:- Reworked the
Threadlet
class to not expose its innards quite so much. As
a result, the argument it passes to the thread "start" and "main" functions
is now an object which has a handful of "just for the runners" methods, with
said methods removed from the public API ofThreadlet
itself.
- Reworked the
net-util
:- Renamed
OutgoingResponse
toFullResponse
, to allow "semantic space" for
StatusResponse
.
- Renamed
webapp-*
:- Renamed the modules specifically concerned with webapp (web application)
implementation to have the prefixwebapp-
:built-ins
->webapp-builtins
sys-framework
->webapp-core
sys-util
->webapp-util
- Renamed class
Warehouse
-- a name that @danfuzz never really liked -- to
now beWebappRoot
, which reflects both its high level role and the fact
that it is the root component in its component hierarchy. - Removed the "filtering for free" behavior on
BaseApplication
. (See below.)
- Renamed the modules specifically concerned with webapp (web application)
Other notable changes:
fs-util
:- New class
FileAppender
, which does a modicum of buffering. This is used to
moderate filesystem calls when logging.
- New class
net-util
:- New class
StatusResponse
, to allow applications to indicate a response of
just a status code, letting the main protocol implementation fill it out
as necessary. - New typedef
TypeOutgoingResponse
, which covers all valid response types.
- New class
webapp-builtins
:- Loosened restrictions on path component syntax in
PathRouter
. - Added
bufferPeriod
configuration option toAccessLogToFile
and
SyslogToFile
. - New class
RequestFilter
to take over the duties of the former "filtering
for free" behavior ofBaseApplication
.
- Loosened restrictions on path component syntax in