Patch Changes
-
0961d97: Observe tier: first-class interaction records and a typed record channel.
attribution.interactions()andInteractionEvent: one record perwithInteractiondispatch withat,handlerMs,writes,runs,created(computations built in its runs),runMs, theholdsandnavigationsattached, andsettledMs/outcome(idle|committed|held) once everything it caused is through.attribution.subscribe(type, listener)for"rerun" | "interaction" | "hold" | "navigation", delivered synchronously as each record completes; the baresubscribe(listener)form is unchanged.RerunEvent.atandHoldEvent.at— absolute times on theperformance.now()clock beside the existing durations.HoldEvent.acknowledgementsreplacesacknowledgedBy: one{ kind, source, reader? }per affordance,readerthe owner path of the effect that painted it.feedback().sources[].acknowledgedBystill ranks bykind:source.@solidjs/diagnosticsartifact format version 4 (holds carryacknowledgements; assertion evidence likewise).NavigationRef.paramsvalues may beundefined(an optional segment left unbound).OBSERVE.exclude(owner)/OBSERVE.isExcluded(subject)— an observer rendering inside the app it watches marks its own subtree; diagnostics about it are suppressed and the engine records none of its runs.solid-jsre-exports the tier types from its root:InteractionRef,NavigationRef,OriginRef,DiagnosticEventand friends, and the engine's record types (ChangeOrigin,RerunEvent,HoldEvent,NavigationEvent,InteractionEvent, …).
-
1807f7f: Observe tier: split dev-only checks from production-legal observability wiring.
Breaking (pre-release):
DEV.diagnosticsmoved to a newOBSERVEexport
—OBSERVE.diagnostics.{subscribe,capture,emit},OBSERVE.subjectOf(event).
DEVkeeps the devtools surface (hooks,getChildren/getSignals/
getParent/getSources/getObservers) and gains the console face
(DEV.report,DEV.setConsoleFooter— formerly
DEV.diagnostics.setConsoleFooter). Both are exported from@solidjs/signals
andsolid-js(client and server).Breaking (pre-release): the attribution engine is its own entry.
DEV.attribution.enable()and friends are now
import { attribution } from "solid-js/attribution"(or
@solidjs/signals/attribution) —enable/disable/subscribe/history/why/ subscriptions/costs/waterfalls/holds/feedback/markFlight/format/formatOrigin,
plus the record types (RerunEvent,ChangeRecord,ChangeOrigin,
HoldEvent, …) which were previously unexported. The runtime keeps only the
core's side asOBSERVE.attribution:install(hooks)/installed(the hook
slot an engine — built-in or a devtools' own — installs into) and
withInteraction(ref, fn)(the frame the web runtime opens around every event
dispatch;fn()when no engine is installed). A build that never imports the
engine never ships it: the observe tier costs ~1.3 KB brotli over prod on the
CSR scenario, the engine 9.7 KB more when enabled. The import is legal in
every tier — prod resolves an inert engine with the same surface.
@solidjs/diagnosticsrequiresOBSERVEand imports the engine itself; it now
works against observe builds.New build tier. Every package with wiring ships
<entry>.observe.{js,cjs}
beside its prod and dev artifacts, selected by a newobserveexport condition
(listed afterdevelopment, so dev still wins when both are set): signals
dist/observe/+dist/node.observe.cjs(each with anattributionentry
besideindex; the flat dev/CJS builds are code-split so both entries share
one module instance), solid-jssolid.observe.*and
server.observe.*, webweb.observe.*, universaluniversal.observe.*.
Observe builds keep attribution hook sites, owner labels (_name, flow-control
memo names, component roots), graph edge counters and the diagnostics channel;
they fold out strict-read checks, invariants, forbidden-scope guards, devtools
brands and all console output. Entries without wiring (frames, server-functions,
storage, h, html, element) fall through to prod underobserve. Signals gates
on__OBSERVE__(dev implies observe; asserted at init), solid-js/web/universal
on the"_SOLID_OBSERVE_"literal. Default prod artifacts are unchanged apart
from the newOBSERVE = undefinedexport;_nameis reserved from property
mangling so the cross-package label survives in the observe tree.
OBSERVE.diagnostics.emitaccepts an explicitownerPathfor hosts whose
owners are not signals' owners (the SSR runtime). -
Updated dependencies [21c5460]
-
Updated dependencies [711b557]
-
Updated dependencies [1354a53]
-
Updated dependencies [ae0ec3f]
-
Updated dependencies [1c9e9e7]
-
Updated dependencies [b5bd6fb]
-
Updated dependencies [b5bd6fb]
-
Updated dependencies [b5bd6fb]
-
Updated dependencies [b5bd6fb]
-
Updated dependencies [b5bd6fb]
-
Updated dependencies [b5bd6fb]
-
Updated dependencies [05725e8]
-
Updated dependencies [27aee36]
-
Updated dependencies [fe3ab92]
-
Updated dependencies [51c201f]
-
Updated dependencies [2fa7539]
-
Updated dependencies [0961d97]
-
Updated dependencies [1807f7f]
-
Updated dependencies [645ec0d]
-
Updated dependencies [12c3be9]
-
Updated dependencies [3a5fe8c]
-
Updated dependencies [a39415c]
-
Updated dependencies [dd1d4ed]
-
Updated dependencies [4e730a9]
-
Updated dependencies [4935c7d]
-
Updated dependencies [0f14430]
- @solidjs/signals@2.0.0-rc.8