diff --git a/.changeset/pre.json b/.changeset/pre.json index a8a0dc6724..f6c24d4939 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -24,7 +24,8 @@ "@solidjs/diagnostics": "2.0.0-rc.2", "effect-example": "0.0.0", "todos-server-example": "0.0.0", - "board-example": "0.0.0" + "board-example": "0.0.0", + "server-dbmon-example": "0.0.0" }, "changesets": [ "a28-writes-visible-at-flush", @@ -54,6 +55,7 @@ "affects-captured-proxy-scope", "affects-single-key", "afraid-queens-divide", + "agent-facing-links-and-text", "ai-readiness-docs-handoff", "ai-readiness-docs-pass-2", "ai-readiness-docs-pass", @@ -86,6 +88,7 @@ "avoid-reconcile-key-recompute", "awaitable-refresh", "babel-plugin-ssr-hoist-props-ts-types", + "babel-source-names-locations", "bare-client-source-suspends-as-final-hole", "behavior-claims-delegate-glue", "behavior-claims-props", @@ -101,6 +104,7 @@ "boundary-accessor-return-types", "boundary-asset-scope-leak", "boundary-fallback-once-per-show", + "boundary-held-mount-u3", "boundary-primitives-internal", "brave-heaps-refuse", "bridge-keeps-shared-references", @@ -118,6 +122,7 @@ "bump-dom-expressions-next-5", "bump-dom-expressions-next-8", "carry-live-get-grant-across-dev-rebind", + "caught-notready-store-reader", "chunk-reader-hardening", "claim-after-initial-attributes-compilers", "claim-after-initial-attributes", @@ -125,6 +130,7 @@ "clean-bikes-teach", "cleanup-unwind-order", "cleanup-use-once-helpers", + "cleanup-write-during-landing", "client-error-hook", "client-only-preload-hints", "client-only-sibling-id-drift", @@ -145,6 +151,7 @@ "compiler-server-components-attribute-slot-positions", "compiler-source-locations", "compiler-source-names-bindings", + "compiler-source-names-locations", "compiler-source-names-option", "compiler-source-names-primitives", "compiler-spread-sources-array", @@ -160,10 +167,13 @@ "context-default-less-throws", "continue-tsrx-semantic-ir", "core-hot-path-shape-alignment", + "create-deferred", + "create-root-dispose-retention", "create-root-ownership-jsdoc", "cross-package-owner-fields", "csr-hydration-seam-trim", "curly-rats-dress", + "data-attribute-types", "dedup-hydration-gate-boilerplate", "dedupe-disposal-dep-clearing", "dedupe-dispose-unobserved", @@ -199,7 +209,12 @@ "diagnostics-engine-release-token", "diagnostics-fanout-repair-projection", "diagnostics-owner-path-console-entry", + "diagnostics-remove-unserved-endpoint-methods", "diagnostics-responsiveness-gate", + "diagnostics-source-locations-diagnostics", + "diagnostics-source-locations-signals", + "diagnostics-source-locations-solid", + "diagnostics-source-locations-web", "direct-control-signal-reporting", "disable-authored-tsrx-lazy-destructuring", "docs-relocation-comment-paths", @@ -216,6 +231,7 @@ "dormant-memo-relink-on-reawaken", "drop-anchor-nav-attributes", "drop-compiler-legacy", + "drop-internal-nonce-helpers", "dynamic-async-iterable-source-type", "dynamic-binding-gate-prev-next", "dynamic-component-solid", @@ -240,6 +256,7 @@ "enforce-provide-event-once-on-direct-calls", "enforce-provide-event-single-invocation", "error-hook-thrower-path", + "errored-escapes-children-4116", "errored-fallback-thunk-scope", "errored-pass-tail-still-observes", "errored-shared-slot-rejection", @@ -593,6 +610,7 @@ "fold-runtime-wrappers", "for-hydration-id-parity", "format-ssr-hydration-followups", + "fragment-lazy-assets-resume", "fragment-ledger-one-reveal-owner", "fragment-reveal-policy-registry", "fragment-stylesheet-gate", @@ -611,10 +629,13 @@ "frames-bind-tier", "frames-c12-fragment-error-outcome", "frames-c13-sweep-ops-chunk", + "frames-claim-nested-region-links-once", "frames-claim-through-hydrate-window", "frames-client-externalize-wire-layer", "frames-consume-live", + "frames-data-call-hydration", "frames-data-response-scoped", + "frames-deferred-hydration", "frames-drop-dead-slot-nodes-writes", "frames-dynamic-handoff", "frames-element-seams", @@ -636,6 +657,7 @@ "frames-residue-1-lean-reask", "frames-residue-3-every-fill-through-insert", "frames-residue-4-sref-table", + "frames-scoped-hole-sync", "frames-server-components-experimental", "frames-showing-refetch-settles-on-apply", "frames-single-flight-wiring", @@ -645,7 +667,9 @@ "frames-tier-mechanism", "frames-trace-update-site-wait", "frames-traces-tier", + "frames-unmarked-plain-frames", "freeze-awaited-render-head", + "fresh-boundary-child-held-u1", "fresh-loading-fallback-in-flush", "fuzzy-queens-retire", "gate-child-companion-walk", @@ -656,6 +680,7 @@ "golf-effect-ownership-flag", "graph-growth-held-navigation", "graph-growth-outlived-navigation", + "graph-growth-session-snapshot", "graph-growth", "graph-size-diagnostics", "guard-error-carried-failure-channels", @@ -668,7 +693,9 @@ "heap-mark-incremental", "held-branch-reads-its-transaction", "held-derivation-not-a-proposal", + "held-error-waits-for-frame", "held-truth-masks-lane-passes-only", + "hello-world-under-10kb", "hide-internal-type-exports", "hoist-web-protocol-components", "hold-consistency-batch-2", @@ -735,6 +762,7 @@ "lazy-async-inflight-autodispose", "lazy-children-storepath", "lazy-client-only-export-option", + "lazy-code-waterfall", "lazy-hydration-failure-visibility", "lazy-hydration-id-asset-keys", "lazy-hydration-trace-mock-promise", @@ -745,8 +773,15 @@ "lean-ssr-owner-runtime", "lemon-mails-lick", "live-address-event-stream-framing", + "live-attr-escalation-address", "live-chaos-reconnect-knob", + "live-for-async-reads", + "live-for-row-ops", "live-hole-baseline-attr-addresses", + "live-hole-for-keeps-rows", + "live-hole-latched-check", + "live-hole-slots", + "live-hole-sweep-scopes", "live-holes-server-support", "live-reference-sync-call-type", "live-response-lifetime-per-scope-takeover", @@ -757,6 +792,7 @@ "live-takeover-yields-adopted-value", "loading-errored-composition-escape", "loading-latest-shared-source-3892", + "loading-lazy-sibling-order", "loading-on-follows-frame", "loading-on-keyed-boundary-not-born-held", "loading-on-latest-is-a-capability", @@ -769,6 +805,7 @@ "lone-spread-no-merge", "long-hold-and-stricter-thresholds", "lowercase-on-is-attribute", + "map-array-subsequence-fast-paths", "maparray-nonkeyed-store-stale-row", "maparray-small-move-fast-path", "maparray-swap-commit", @@ -778,11 +815,15 @@ "missing-effect-fn-loud-failure", "mode-specific-control-flow-callbacks", "module-server-exports-register-by-value", + "morph-drops-stale-text", + "morph-skips-identical", "move-loading-wrapper-into-flow", "move-to-beta", "multi-root-pending-boundaries", "multi-source-single-flight", "multisite-server-component-hydration", + "nested-fill-context", + "nested-on-reset-boundary-u4", "nested-region-refetch-3894", "nested-stream-demand-gate-teardown", "nohydration-lazy-maparray-deps", @@ -805,6 +846,7 @@ "optimistic-chained-previous-value-3672", "optimistic-draft-reads-compose-over-staged-truth", "optimistic-draft-visibility-3665", + "optimistic-guess-over-held-slot", "optimistic-landing-fold", "optimistic-lists-drivable", "optimistic-live-echo-3898", @@ -849,6 +891,7 @@ "per-render-serialize-latch", "per-root-boundary-resume", "per-row-patch-unbinds", + "per-setter-written-keys-u8", "perf-2893-guard-cleanup", "perf-dep-revalidation-and-reconcile", "perf-footer-attribution-discovery", @@ -878,6 +921,7 @@ "projection-leaf-companions-die-with-firewall", "projection-leaf-release", "projection-lists-drivable", + "projection-owner-graph-growth", "projection-root-entity-swap", "projection-root-write-overlay", "projection-sync-throw-reaches-readers", @@ -890,6 +934,7 @@ "rc-api-freeze-pass", "reaction-rearm-replaces", "read-every-body-the-transport-tees", + "rearm-boundary-scope-u9", "rebuild-buffered-request-from-parts", "recompute-preserves-disposed", "reconcile-array-object-shape-guard", @@ -928,6 +973,7 @@ "reject-unsupported-server-module-exports", "release-companion-leaf-3503", "relocate-uninit-lane-check", + "remove-binding-slots", "remove-capturing-event-listeners", "remove-cjs", "remove-create-effect-single-argument-overload", @@ -954,6 +1000,7 @@ "require-client-source-commit-zero", "require-seroval-1-5-4", "require-seroval-1-6", + "respond-bigint-lazy-body", "respond-envelope-is-a-response", "response-head-lifecycle", "responsive-preload-links", @@ -962,6 +1009,7 @@ "reveal-ssr-streaming-support", "reveal-string-ssr-collapsed", "reveal-together-nested", + "revealed-fragment-before-settle", "revert-complete-store-seeds", "revert-dynamic-deferred-creation", "revert-hydrate-wait-for-records", @@ -973,6 +1021,7 @@ "scope-function-children-holes", "scope-nested-deferred-results-without-mutation", "scope-property-read-holes", + "seedless-derived-stores", "select-multiple-async-value", "serialization-decode-entry", "seroval-1-6-8-streams", @@ -981,12 +1030,15 @@ "server-boundary-records", "server-component-context-barrier", "server-component-hydration-installs-from-frames", + "server-component-site-order", "server-dev-build", "server-diagnostics-artifact", "server-diagnostics-channel", + "server-error-dedup-per-request", "server-error-hook", "server-first-value-lock", "server-fn-undefined-before-string", + "server-function-argument-types-and-nosniff", "server-function-call-observers", "server-function-data-address-split", "server-function-extension-surface", @@ -1014,6 +1066,7 @@ "settle-walk-dev-invariant", "settle-walk-invariant-completion", "settle-walk-requires-initialization", + "settled-document-holes", "sever-reveal-group-at-boundaries", "shallow-compiled-slot-channel", "shallow-slot-alignment-samevaluezero", @@ -1023,6 +1076,7 @@ "shared-cacheable-get-skips-trace", "shared-effect-status-notifier", "shared-read-predicates", + "shell-end-marker-inside-body", "shell-gate-first-apply", "signals-dev-cjs", "signals-disposed-stay-disposed", @@ -1063,12 +1117,15 @@ "snapshot-boundary-assets-serialization", "snapshot-hydration-safety", "snapshot-trailing-holes", + "solid-2-0-agent-primer", "solid-native-frame-protocol-identifiers", "solid-query-gate-packs-compiler", + "solid-ships-diagnostics-json", "source-names-parity", "spec-a33-fallback-hold", "spread-direct-sources", "spread-fewer-nodes", + "spread-ref-factory-ssr", "ssr-boundary-resolve-scope-3414", "ssr-capture-source-locations", "ssr-component-names", @@ -1092,6 +1149,7 @@ "ssr-spread-static-tail", "ssr-spread-static-text-escape", "ssr-spread-walk-hot-path", + "ssr-suspend-unwind", "ssr-validate-dynamic-names", "ssrSource-effects-and-fix-server-createEffect", "ssrsource-async-iterables", @@ -1141,6 +1199,7 @@ "store-treeshakeable-optimism", "store-untracked-born-held", "store-write-floor-narrow", + "stream-abort-cleanup-throw", "stream-demand-gate", "stream-error-drops-settled-children", "strict-untrack-warning", @@ -1160,6 +1219,7 @@ "thin-badgers-move", "tighten-show-match-jsx-types", "tiny-lions-jam", + "trace-ids-math-random", "track-applied-classes", "tracked-style-class-objects", "transform-result-sees-thrown-errors", @@ -1178,6 +1238,7 @@ "until-confirmed-derivation", "until-flip-entanglement", "until-live-source-ack", + "until-truth-reads-split", "untracked-async-handler", "untracked-read-after-await", "untracked-verdict-snapshot", @@ -1199,6 +1260,7 @@ "use-head-json-script-escape", "validate-malformed-html-error", "validate-prepare-request-return", + "verdict-memo-under-held-memo-u10", "verdict-mount-first-pass-mainline", "verdict-pull-outside-window", "verdict-reader-first-observer-holds-the-flight", diff --git a/examples/board/CHANGELOG.md b/examples/board/CHANGELOG.md index 9d4dcb614a..3b3033b0c4 100644 --- a/examples/board/CHANGELOG.md +++ b/examples/board/CHANGELOG.md @@ -1,5 +1,52 @@ # board-example +## 0.0.1-rc.1 + +### Patch Changes + +- Updated dependencies [3d8a8a9] +- Updated dependencies [b8617ec] +- Updated dependencies [86cf504] +- Updated dependencies [4a99c84] +- Updated dependencies [4a99c84] +- Updated dependencies [96b615d] +- Updated dependencies [0f64d82] +- Updated dependencies [467ac97] +- Updated dependencies [8092282] +- Updated dependencies [8163bc3] +- Updated dependencies [1bcee91] +- Updated dependencies [10b3f55] +- Updated dependencies [1f3b5b4] +- Updated dependencies [ccd9948] +- Updated dependencies [dbc5d00] +- Updated dependencies [0e0c043] +- Updated dependencies [7c36f2b] +- Updated dependencies [0a49dd8] +- Updated dependencies [51d005a] +- Updated dependencies [347f242] +- Updated dependencies [c5da908] +- Updated dependencies [b972757] +- Updated dependencies [8e2590e] +- Updated dependencies [8fbadfd] +- Updated dependencies [e1bf2af] +- Updated dependencies [e43e22f] +- Updated dependencies [3f36f77] +- Updated dependencies [8e2590e] +- Updated dependencies [eb4e019] +- Updated dependencies [dfb31ed] +- Updated dependencies [8bd7a5b] +- Updated dependencies [9ac1481] +- Updated dependencies [3e94215] +- Updated dependencies [a61c929] +- Updated dependencies [36039e2] +- Updated dependencies [3d8a8a9] +- Updated dependencies [3d8a8a9] +- Updated dependencies [4ff6580] +- Updated dependencies [8d4a285] +- Updated dependencies [8268cfd] + - solid-js@2.0.0-rc.16 + - @solidjs/web@2.0.0-rc.16 + ## 0.0.1-rc.0 ### Patch Changes diff --git a/examples/board/package.json b/examples/board/package.json index 3cce585e76..917f40d897 100644 --- a/examples/board/package.json +++ b/examples/board/package.json @@ -1,7 +1,7 @@ { "name": "board-example", "description": "A shared board over one live data source: lists of cards that several tabs drag at once, read into an optimistic store, with every write acknowledged on the stream", - "version": "0.0.1-rc.0", + "version": "0.0.1-rc.1", "private": true, "author": "Ryan Carniato", "license": "MIT", diff --git a/examples/server-dbmon/CHANGELOG.md b/examples/server-dbmon/CHANGELOG.md new file mode 100644 index 0000000000..325807e703 --- /dev/null +++ b/examples/server-dbmon/CHANGELOG.md @@ -0,0 +1,48 @@ +# server-dbmon-example + +## 0.0.1-rc.0 + +### Patch Changes + +- Updated dependencies [3d8a8a9] +- Updated dependencies [b8617ec] +- Updated dependencies [86cf504] +- Updated dependencies [4a99c84] +- Updated dependencies [4a99c84] +- Updated dependencies [96b615d] +- Updated dependencies [0f64d82] +- Updated dependencies [467ac97] +- Updated dependencies [8092282] +- Updated dependencies [8163bc3] +- Updated dependencies [1bcee91] +- Updated dependencies [10b3f55] +- Updated dependencies [1f3b5b4] +- Updated dependencies [ccd9948] +- Updated dependencies [dbc5d00] +- Updated dependencies [0e0c043] +- Updated dependencies [7c36f2b] +- Updated dependencies [0a49dd8] +- Updated dependencies [51d005a] +- Updated dependencies [347f242] +- Updated dependencies [c5da908] +- Updated dependencies [b972757] +- Updated dependencies [8e2590e] +- Updated dependencies [8fbadfd] +- Updated dependencies [e1bf2af] +- Updated dependencies [e43e22f] +- Updated dependencies [3f36f77] +- Updated dependencies [8e2590e] +- Updated dependencies [eb4e019] +- Updated dependencies [dfb31ed] +- Updated dependencies [8bd7a5b] +- Updated dependencies [9ac1481] +- Updated dependencies [3e94215] +- Updated dependencies [a61c929] +- Updated dependencies [36039e2] +- Updated dependencies [3d8a8a9] +- Updated dependencies [3d8a8a9] +- Updated dependencies [4ff6580] +- Updated dependencies [8d4a285] +- Updated dependencies [8268cfd] + - solid-js@2.0.0-rc.16 + - @solidjs/web@2.0.0-rc.16 diff --git a/examples/server-dbmon/package.json b/examples/server-dbmon/package.json index ca15fe37b9..01f1a4dae4 100644 --- a/examples/server-dbmon/package.json +++ b/examples/server-dbmon/package.json @@ -1,7 +1,7 @@ { "name": "server-dbmon-example", "description": "DBMon as a live server component: a monitoring dashboard whose data lives on the server, rendered there and streamed to every open tab as it changes", - "version": "0.0.0", + "version": "0.0.1-rc.0", "private": true, "author": "Ryan Carniato", "license": "MIT", diff --git a/examples/todos-server/CHANGELOG.md b/examples/todos-server/CHANGELOG.md index f7eee87adb..a298a1525d 100644 --- a/examples/todos-server/CHANGELOG.md +++ b/examples/todos-server/CHANGELOG.md @@ -1,5 +1,52 @@ # todos-server-example +## 0.0.1-rc.4 + +### Patch Changes + +- Updated dependencies [3d8a8a9] +- Updated dependencies [b8617ec] +- Updated dependencies [86cf504] +- Updated dependencies [4a99c84] +- Updated dependencies [4a99c84] +- Updated dependencies [96b615d] +- Updated dependencies [0f64d82] +- Updated dependencies [467ac97] +- Updated dependencies [8092282] +- Updated dependencies [8163bc3] +- Updated dependencies [1bcee91] +- Updated dependencies [10b3f55] +- Updated dependencies [1f3b5b4] +- Updated dependencies [ccd9948] +- Updated dependencies [dbc5d00] +- Updated dependencies [0e0c043] +- Updated dependencies [7c36f2b] +- Updated dependencies [0a49dd8] +- Updated dependencies [51d005a] +- Updated dependencies [347f242] +- Updated dependencies [c5da908] +- Updated dependencies [b972757] +- Updated dependencies [8e2590e] +- Updated dependencies [8fbadfd] +- Updated dependencies [e1bf2af] +- Updated dependencies [e43e22f] +- Updated dependencies [3f36f77] +- Updated dependencies [8e2590e] +- Updated dependencies [eb4e019] +- Updated dependencies [dfb31ed] +- Updated dependencies [8bd7a5b] +- Updated dependencies [9ac1481] +- Updated dependencies [3e94215] +- Updated dependencies [a61c929] +- Updated dependencies [36039e2] +- Updated dependencies [3d8a8a9] +- Updated dependencies [3d8a8a9] +- Updated dependencies [4ff6580] +- Updated dependencies [8d4a285] +- Updated dependencies [8268cfd] + - solid-js@2.0.0-rc.16 + - @solidjs/web@2.0.0-rc.16 + ## 0.0.1-rc.3 ### Patch Changes diff --git a/examples/todos-server/package.json b/examples/todos-server/package.json index e9ec2b87ff..2637de62f6 100644 --- a/examples/todos-server/package.json +++ b/examples/todos-server/package.json @@ -1,7 +1,7 @@ { "name": "todos-server-example", "description": "TodoMVC as a Solid Server Component — the list is server markup whose every control is a form that works without JavaScript; with it, a submission's aria-busy mark shows the intent through CSS and typed errors come back through useSubmissions", - "version": "0.0.1-rc.3", + "version": "0.0.1-rc.4", "private": true, "author": "Ryan Carniato", "license": "MIT", diff --git a/packages/babel-plugin/CHANGELOG.md b/packages/babel-plugin/CHANGELOG.md index 25c8b53def..baae155c55 100644 --- a/packages/babel-plugin/CHANGELOG.md +++ b/packages/babel-plugin/CHANGELOG.md @@ -1,5 +1,13 @@ # @solidjs/babel-plugin +## 2.0.0-rc.16 + +### Patch Changes + +- 4a99c84: `sourceNames` gains a `locations` kind (and the plugin a `root` option): component and binding labels carry a `file:line:col` for diagnostics. `createComponent(Home, props, "Home", "src/App.tsx:12:5")` points at the ``) where the server's markup needs client behavior, or a form `action` for a mutation. Removed with them: the `BindingSlot`, `SlotOutput` and `SlotError` types, the lazy `@solidjs/web/frames/bind` entry and its `"bind"` tier, the `_s:*` position markers and the compiled `ssrClaim` hole, the effect of the `serverComponents` compiler option (`@solidjs/compiler` and `@solidjs/babel-plugin` still accept it, so existing build configs keep working, and ignore it), and the `BINDING_SLOT_POSITION` diagnostic code (`@solidjs/signals`' `DiagnosticCode`, `solid-js`'s `diagnostics.json`). Ordinary slots, their `slot:` ranges and records, and `$key` are unchanged. +- d0ba31c: SSR evaluates a `ref` expression beside a spread, as it already does without one, so a ref factory's owned setup (`ref={tooltip()}`) runs on the server too and the hydration ids after it line up. The ref itself is still never called on the server (#4081). Under `serverComponents` the same holds outside a server component's render, where a ref expression was never evaluated on either path; inside one the claim evaluates it, once. + ## 2.0.0-rc.15 ### Patch Changes diff --git a/packages/babel-plugin/package.json b/packages/babel-plugin/package.json index 167eedecb3..65af0a4d88 100644 --- a/packages/babel-plugin/package.json +++ b/packages/babel-plugin/package.json @@ -1,7 +1,7 @@ { "name": "@solidjs/babel-plugin", "description": "Babel compiler plugin for Solid templates", - "version": "2.0.0-rc.15", + "version": "2.0.0-rc.16", "author": "Ryan Carniato", "license": "MIT", "repository": { diff --git a/packages/compiler/CHANGELOG.md b/packages/compiler/CHANGELOG.md index e68cb497e0..edc695755b 100644 --- a/packages/compiler/CHANGELOG.md +++ b/packages/compiler/CHANGELOG.md @@ -1,5 +1,16 @@ # @solidjs/compiler +## 2.0.0-rc.16 + +### Patch Changes + +- 4a99c84: `sourceNames` gains a `locations` kind and `transform()` a `root` option: component and binding labels carry a `file:line:col` for diagnostics, printed the same as `@solidjs/babel-plugin`'s. `createComponent(Home, props, "Home", "src/App.tsx:12:5")` points at the ``) where the server's markup needs client behavior, or a form `action` for a mutation. Removed with them: the `BindingSlot`, `SlotOutput` and `SlotError` types, the lazy `@solidjs/web/frames/bind` entry and its `"bind"` tier, the `_s:*` position markers and the compiled `ssrClaim` hole, the effect of the `serverComponents` compiler option (`@solidjs/compiler` and `@solidjs/babel-plugin` still accept it, so existing build configs keep working, and ignore it), and the `BINDING_SLOT_POSITION` diagnostic code (`@solidjs/signals`' `DiagnosticCode`, `solid-js`'s `diagnostics.json`). Ordinary slots, their `slot:` ranges and records, and `$key` are unchanged. +- d0ba31c: SSR evaluates a `ref` expression beside a spread, as it already does without one, so a ref factory's owned setup (`ref={tooltip()}`) runs on the server too and the hydration ids after it line up. The ref itself is still never called on the server (#4081). Under `serverComponents` the same holds outside a server component's render, where a ref expression was never evaluated on either path; inside one the claim evaluates it, once. + ## 2.0.0-rc.15 ### Patch Changes diff --git a/packages/compiler/npm/darwin-arm64/package.json b/packages/compiler/npm/darwin-arm64/package.json index f0a9c96dcf..81a2548cd9 100644 --- a/packages/compiler/npm/darwin-arm64/package.json +++ b/packages/compiler/npm/darwin-arm64/package.json @@ -1,6 +1,6 @@ { "name": "@solidjs/compiler-darwin-arm64", - "version": "2.0.0-rc.15", + "version": "2.0.0-rc.16", "cpu": [ "arm64" ], diff --git a/packages/compiler/npm/darwin-x64/package.json b/packages/compiler/npm/darwin-x64/package.json index e98b6341e0..528f4d08cc 100644 --- a/packages/compiler/npm/darwin-x64/package.json +++ b/packages/compiler/npm/darwin-x64/package.json @@ -1,6 +1,6 @@ { "name": "@solidjs/compiler-darwin-x64", - "version": "2.0.0-rc.15", + "version": "2.0.0-rc.16", "cpu": [ "x64" ], diff --git a/packages/compiler/npm/linux-arm64-gnu/package.json b/packages/compiler/npm/linux-arm64-gnu/package.json index 4d63958f93..3c24d6127e 100644 --- a/packages/compiler/npm/linux-arm64-gnu/package.json +++ b/packages/compiler/npm/linux-arm64-gnu/package.json @@ -1,6 +1,6 @@ { "name": "@solidjs/compiler-linux-arm64-gnu", - "version": "2.0.0-rc.15", + "version": "2.0.0-rc.16", "cpu": [ "arm64" ], diff --git a/packages/compiler/npm/linux-x64-gnu/package.json b/packages/compiler/npm/linux-x64-gnu/package.json index b54d372515..ad8fd964ea 100644 --- a/packages/compiler/npm/linux-x64-gnu/package.json +++ b/packages/compiler/npm/linux-x64-gnu/package.json @@ -1,6 +1,6 @@ { "name": "@solidjs/compiler-linux-x64-gnu", - "version": "2.0.0-rc.15", + "version": "2.0.0-rc.16", "cpu": [ "x64" ], diff --git a/packages/compiler/npm/wasm32-wasi/package.json b/packages/compiler/npm/wasm32-wasi/package.json index 2d39756c5b..ad96f632dc 100644 --- a/packages/compiler/npm/wasm32-wasi/package.json +++ b/packages/compiler/npm/wasm32-wasi/package.json @@ -1,6 +1,6 @@ { "name": "@solidjs/compiler-wasm32-wasi", - "version": "2.0.0-rc.15", + "version": "2.0.0-rc.16", "main": "compiler.wasi.cjs", "files": [ "compiler.wasm32-wasi.wasm", diff --git a/packages/compiler/npm/win32-x64-msvc/package.json b/packages/compiler/npm/win32-x64-msvc/package.json index acc04e455b..ee55fe37cc 100644 --- a/packages/compiler/npm/win32-x64-msvc/package.json +++ b/packages/compiler/npm/win32-x64-msvc/package.json @@ -1,6 +1,6 @@ { "name": "@solidjs/compiler-win32-x64-msvc", - "version": "2.0.0-rc.15", + "version": "2.0.0-rc.16", "cpu": [ "x64" ], diff --git a/packages/compiler/package.json b/packages/compiler/package.json index bef9cda311..d80200a94e 100644 --- a/packages/compiler/package.json +++ b/packages/compiler/package.json @@ -1,7 +1,7 @@ { "name": "@solidjs/compiler", "description": "Solid's native Oxc JSX compiler", - "version": "2.0.0-rc.15", + "version": "2.0.0-rc.16", "author": "Ryan Carniato", "license": "MIT", "repository": { @@ -62,11 +62,11 @@ "emnapi": "^1.11.3" }, "optionalDependencies": { - "@solidjs/compiler-darwin-x64": "2.0.0-rc.15", - "@solidjs/compiler-darwin-arm64": "2.0.0-rc.15", - "@solidjs/compiler-linux-x64-gnu": "2.0.0-rc.15", - "@solidjs/compiler-linux-arm64-gnu": "2.0.0-rc.15", - "@solidjs/compiler-win32-x64-msvc": "2.0.0-rc.15", - "@solidjs/compiler-wasm32-wasi": "2.0.0-rc.15" + "@solidjs/compiler-darwin-x64": "2.0.0-rc.16", + "@solidjs/compiler-darwin-arm64": "2.0.0-rc.16", + "@solidjs/compiler-linux-x64-gnu": "2.0.0-rc.16", + "@solidjs/compiler-linux-arm64-gnu": "2.0.0-rc.16", + "@solidjs/compiler-win32-x64-msvc": "2.0.0-rc.16", + "@solidjs/compiler-wasm32-wasi": "2.0.0-rc.16" } } diff --git a/packages/diagnostics/CHANGELOG.md b/packages/diagnostics/CHANGELOG.md index 7d14621ec8..d03791b8c9 100644 --- a/packages/diagnostics/CHANGELOG.md +++ b/packages/diagnostics/CHANGELOG.md @@ -1,5 +1,72 @@ # @solidjs/diagnostics +## 2.0.0-rc.16 + +### Patch Changes + +- 3d8a8a9: Diagnostics protocol: removed the `holds` and `feedback` entries from `DiagnosticsMethods` (and so from `DiagnosticsMethod`, `DiagnosticsRequest`, `DiagnosticsResponse`) in `@solidjs/diagnostics/protocol`. The `/__solid/diagnostics` dev-server endpoint never served them; it answers `begin`, `end`, `active`, `whyDidRun` and `costs`, and the holds and feedback tables arrive in the `end` payload (`attribution.holds`, `attribution.feedback`). The in-page bridge's `holds()`/`feedback()` queries are unchanged. The agent-loops skill's endpoint example no longer lists a `feedback` call. +- 4a99c84: Captured findings carry `loc` (the source location the runtime resolved, `file:line:col`) as a plain event field through artifacts and the JSONL form; assertion failures print it with the rest of the offending event. +- 3d8a8a9: Ship the Solid 2.0 primer for coding agents as the `solid-2.0` skill, emit `CHEATSHEET.md` as the `solid-2.0-cheatsheet` skill on build, give every shipped skill the `name`/`description` frontmatter the Agent Skills format requires, and add the `tanstack-intent` keyword so skill registries discover them in `node_modules`. +- Updated dependencies [3d8a8a9] +- Updated dependencies [a7fe050] +- Updated dependencies [52008d9] +- Updated dependencies [0b6765f] +- Updated dependencies [b8617ec] +- Updated dependencies [3643c5e] +- Updated dependencies [86cf504] +- Updated dependencies [4a99c84] +- Updated dependencies [4a99c84] +- Updated dependencies [4a99c84] +- Updated dependencies [96b615d] +- Updated dependencies [0f64d82] +- Updated dependencies [467ac97] +- Updated dependencies [8092282] +- Updated dependencies [8163bc3] +- Updated dependencies [1bcee91] +- Updated dependencies [10b3f55] +- Updated dependencies [1f3b5b4] +- Updated dependencies [61c4436] +- Updated dependencies [a39acdd] +- Updated dependencies [0bda987] +- Updated dependencies [ccd9948] +- Updated dependencies [dbc5d00] +- Updated dependencies [0e0c043] +- Updated dependencies [7c36f2b] +- Updated dependencies [0a49dd8] +- Updated dependencies [51d005a] +- Updated dependencies [347f242] +- Updated dependencies [c5da908] +- Updated dependencies [b972757] +- Updated dependencies [8e2590e] +- Updated dependencies [f3973ea] +- Updated dependencies [8fbadfd] +- Updated dependencies [e1bf2af] +- Updated dependencies [e43e22f] +- Updated dependencies [c12c420] +- Updated dependencies [a2d5669] +- Updated dependencies [4bc7969] +- Updated dependencies [d3cddff] +- Updated dependencies [c2513e3] +- Updated dependencies [3f36f77] +- Updated dependencies [8e2590e] +- Updated dependencies [eb4e019] +- Updated dependencies [dfb31ed] +- Updated dependencies [8bd7a5b] +- Updated dependencies [9ac1481] +- Updated dependencies [3e94215] +- Updated dependencies [a61c929] +- Updated dependencies [36039e2] +- Updated dependencies [3d8a8a9] +- Updated dependencies [3d8a8a9] +- Updated dependencies [4ff6580] +- Updated dependencies [8d4a285] +- Updated dependencies [8268cfd] +- Updated dependencies [3fc5551] +- Updated dependencies [42c2568] + - solid-js@2.0.0-rc.16 + - @solidjs/signals@2.0.0-rc.16 + - @solidjs/web@2.0.0-rc.16 + ## 2.0.0-rc.15 ### Patch Changes diff --git a/packages/diagnostics/package.json b/packages/diagnostics/package.json index 1b82a9bffd..3190eb27d4 100644 --- a/packages/diagnostics/package.json +++ b/packages/diagnostics/package.json @@ -1,6 +1,6 @@ { "name": "@solidjs/diagnostics", - "version": "2.0.0-rc.15", + "version": "2.0.0-rc.16", "description": "Agent-consumable diagnostics harness for Solid: capture the dev-mode diagnostic and attribution channels as structured artifacts, with assertion helpers for tests and agent loops.", "author": "Ryan Carniato", "license": "MIT", @@ -52,11 +52,11 @@ "test:watch": "vitest watch tests" }, "dependencies": { - "@solidjs/signals": "^2.0.0-rc.15" + "@solidjs/signals": "^2.0.0-rc.16" }, "peerDependencies": { - "@solidjs/web": "^2.0.0-rc.15", - "solid-js": "^2.0.0-rc.15", + "@solidjs/web": "^2.0.0-rc.16", + "solid-js": "^2.0.0-rc.16", "vitest": ">=2.0.0" }, "peerDependenciesMeta": { diff --git a/packages/element/CHANGELOG.md b/packages/element/CHANGELOG.md index 32e4d0c311..7d3e4cb1fc 100644 --- a/packages/element/CHANGELOG.md +++ b/packages/element/CHANGELOG.md @@ -1,5 +1,52 @@ # solid-element +## 2.0.0-rc.16 + +### Patch Changes + +- Updated dependencies [3d8a8a9] +- Updated dependencies [b8617ec] +- Updated dependencies [86cf504] +- Updated dependencies [4a99c84] +- Updated dependencies [4a99c84] +- Updated dependencies [96b615d] +- Updated dependencies [0f64d82] +- Updated dependencies [467ac97] +- Updated dependencies [8092282] +- Updated dependencies [8163bc3] +- Updated dependencies [1bcee91] +- Updated dependencies [10b3f55] +- Updated dependencies [1f3b5b4] +- Updated dependencies [ccd9948] +- Updated dependencies [dbc5d00] +- Updated dependencies [0e0c043] +- Updated dependencies [7c36f2b] +- Updated dependencies [0a49dd8] +- Updated dependencies [51d005a] +- Updated dependencies [347f242] +- Updated dependencies [c5da908] +- Updated dependencies [b972757] +- Updated dependencies [8e2590e] +- Updated dependencies [8fbadfd] +- Updated dependencies [e1bf2af] +- Updated dependencies [e43e22f] +- Updated dependencies [3f36f77] +- Updated dependencies [8e2590e] +- Updated dependencies [eb4e019] +- Updated dependencies [dfb31ed] +- Updated dependencies [8bd7a5b] +- Updated dependencies [9ac1481] +- Updated dependencies [3e94215] +- Updated dependencies [a61c929] +- Updated dependencies [36039e2] +- Updated dependencies [3d8a8a9] +- Updated dependencies [3d8a8a9] +- Updated dependencies [4ff6580] +- Updated dependencies [8d4a285] +- Updated dependencies [8268cfd] + - solid-js@2.0.0-rc.16 + - @solidjs/web@2.0.0-rc.16 + ## 2.0.0-rc.15 ### Patch Changes diff --git a/packages/element/package.json b/packages/element/package.json index 2128f7608a..e047222aa8 100644 --- a/packages/element/package.json +++ b/packages/element/package.json @@ -3,7 +3,7 @@ "description": "Webcomponents wrapper for Solid", "author": "Ryan Carniato", "license": "MIT", - "version": "2.0.0-rc.15", + "version": "2.0.0-rc.16", "homepage": "https://github.com/solidjs/solid/blob/next/packages/element#readme", "repository": { "type": "git", @@ -30,8 +30,8 @@ "component-register": "^0.8.7" }, "peerDependencies": { - "solid-js": "^2.0.0-rc.15", - "@solidjs/web": "^2.0.0-rc.15" + "solid-js": "^2.0.0-rc.16", + "@solidjs/web": "^2.0.0-rc.16" }, "devDependencies": { "solid-js": "workspace:*", diff --git a/packages/h/CHANGELOG.md b/packages/h/CHANGELOG.md index 30b7b695b6..762879136b 100644 --- a/packages/h/CHANGELOG.md +++ b/packages/h/CHANGELOG.md @@ -1,5 +1,41 @@ # @solidjs/h +## 2.0.0-rc.16 + +### Patch Changes + +- 86cf504: `data-*` attributes type-check in props objects (`ComponentProps<"div">`, `JSX.HTMLAttributes`), not only in JSX: a template-literal index signature on `ElementAttributes` (#4082). +- Updated dependencies [3d8a8a9] +- Updated dependencies [86cf504] +- Updated dependencies [4a99c84] +- Updated dependencies [96b615d] +- Updated dependencies [8092282] +- Updated dependencies [8163bc3] +- Updated dependencies [1bcee91] +- Updated dependencies [10b3f55] +- Updated dependencies [1f3b5b4] +- Updated dependencies [ccd9948] +- Updated dependencies [0e0c043] +- Updated dependencies [0a49dd8] +- Updated dependencies [347f242] +- Updated dependencies [c5da908] +- Updated dependencies [b972757] +- Updated dependencies [8e2590e] +- Updated dependencies [8fbadfd] +- Updated dependencies [e1bf2af] +- Updated dependencies [e43e22f] +- Updated dependencies [3f36f77] +- Updated dependencies [8e2590e] +- Updated dependencies [8bd7a5b] +- Updated dependencies [9ac1481] +- Updated dependencies [3e94215] +- Updated dependencies [a61c929] +- Updated dependencies [36039e2] +- Updated dependencies [3d8a8a9] +- Updated dependencies [8d4a285] +- Updated dependencies [8268cfd] + - @solidjs/web@2.0.0-rc.16 + ## 2.0.0-rc.15 ### Patch Changes diff --git a/packages/h/package.json b/packages/h/package.json index 5be980f662..a412b9fdfd 100644 --- a/packages/h/package.json +++ b/packages/h/package.json @@ -1,7 +1,7 @@ { "name": "@solidjs/h", "description": "Hyperscript / h() factory for Solid — write components without compiled JSX.", - "version": "2.0.0-rc.15", + "version": "2.0.0-rc.16", "author": "Ryan Carniato", "license": "MIT", "homepage": "https://solidjs.com", @@ -58,7 +58,7 @@ "test": "vitest run" }, "peerDependencies": { - "@solidjs/web": "^2.0.0-rc.15" + "@solidjs/web": "^2.0.0-rc.16" }, "devDependencies": { "@solidjs/web": "workspace:*", diff --git a/packages/html/CHANGELOG.md b/packages/html/CHANGELOG.md index 261584cfdb..10b80392c1 100644 --- a/packages/html/CHANGELOG.md +++ b/packages/html/CHANGELOG.md @@ -1,5 +1,40 @@ # @solidjs/html +## 2.0.0-rc.16 + +### Patch Changes + +- Updated dependencies [3d8a8a9] +- Updated dependencies [86cf504] +- Updated dependencies [4a99c84] +- Updated dependencies [96b615d] +- Updated dependencies [8092282] +- Updated dependencies [8163bc3] +- Updated dependencies [1bcee91] +- Updated dependencies [10b3f55] +- Updated dependencies [1f3b5b4] +- Updated dependencies [ccd9948] +- Updated dependencies [0e0c043] +- Updated dependencies [0a49dd8] +- Updated dependencies [347f242] +- Updated dependencies [c5da908] +- Updated dependencies [b972757] +- Updated dependencies [8e2590e] +- Updated dependencies [8fbadfd] +- Updated dependencies [e1bf2af] +- Updated dependencies [e43e22f] +- Updated dependencies [3f36f77] +- Updated dependencies [8e2590e] +- Updated dependencies [8bd7a5b] +- Updated dependencies [9ac1481] +- Updated dependencies [3e94215] +- Updated dependencies [a61c929] +- Updated dependencies [36039e2] +- Updated dependencies [3d8a8a9] +- Updated dependencies [8d4a285] +- Updated dependencies [8268cfd] + - @solidjs/web@2.0.0-rc.16 + ## 2.0.0-rc.15 ### Patch Changes diff --git a/packages/html/package.json b/packages/html/package.json index daae0334c4..64b4916062 100644 --- a/packages/html/package.json +++ b/packages/html/package.json @@ -1,7 +1,7 @@ { "name": "@solidjs/html", "description": "Tagged-template-literal templating for Solid — write components with no build step.", - "version": "2.0.0-rc.15", + "version": "2.0.0-rc.16", "author": "Ryan Carniato", "license": "MIT", "homepage": "https://solidjs.com", @@ -42,7 +42,7 @@ "test": "vitest run" }, "peerDependencies": { - "@solidjs/web": "^2.0.0-rc.15" + "@solidjs/web": "^2.0.0-rc.16" }, "devDependencies": { "@solidjs/web": "workspace:*", diff --git a/packages/signals/CHANGELOG.md b/packages/signals/CHANGELOG.md index 009b10ef46..6eec9a23a6 100644 --- a/packages/signals/CHANGELOG.md +++ b/packages/signals/CHANGELOG.md @@ -1,5 +1,40 @@ # @solidjs/signals +## 2.0.0-rc.16 + +### Patch Changes + +- 3d8a8a9: Point JSDoc `@description` links at the 2.0 reference docs (v2.solidjs.com), document `isPending`, point the console footer, diagnostics guide and cheatsheet links at the `next` branch, and replace the stale `onMount` advice in the server-side client-only API error. +- a7fe050: A Loading boundary mounted by a pass that joined a hold appears at that hold's commit, its fallback never shown (D-13, U-3). Before, the boundary's content was caught as a fresh mount and the fallback published at once (or, for a `` that opens when a flight lands, flashed at the landing before the content). A first pass born into the flush's hold is now the hold's, not the boundary's: the content reads with the hold and the whole mount appears at its commit. A mount made by a verdict reader (`latest` in a ``) is still mainline and shows the fallback while the hold is up. +- 52008d9: An effect or memo that catches the `NotReadyError` from reading an async derived store (`createStore(async fn, seed)`, `createProjection`) now re-runs when the store's flight lands, as it does for an async memo (#4070). +- 0b6765f: A signal write from an `onCleanup` that a transition's landing runs no longer leaves the landed transaction as the next flush's: later transitions commit again instead of parking forever (#4089). +- b8617ec: `createDeferred(fn, options?)`: an async memo that may lag, but never leads. Before its first answer it is an ordinary async memo (readers suspend to ``, or `loadingValue` shows). After it, a refetch holds nothing: readers keep the previous answer until the new one lands, the rest of the screen moves on, and `isPending` reports the refetch on the node and on everything derived from it, store keys included. A refetch that read a held value lands with that hold. A rejection errors like any memo. `refresh(d)` is a quiet re-ask, and `await refresh(d)` and `until` wait for the landing. It is `createMemo` on the server and hydrates like one. + + The rules: F-1 and F-2 are amended for declared lag, and D-40 / S-41 are new. The `affects()` mark core moved to its own module (`affects-marks.ts`), which `createDeferred` shares. A mark on the source of a derived store now covers that store's keys. + +- 3643c5e: A `createRoot` dispose function no longer keeps the root's `init` function (and everything it closes over) alive while it is held (#4095). +- 4a99c84: Diagnostics carry a source location. `NodeOptions.loc` and `StoreOptions.loc` (`file:line:col`, root-relative — written by the compiler's `sourceNames` `locations` kind, not by hand) land in a `_loc` slot beside `_name` on the observe/dev node literals; store property nodes carry their store's. `DiagnosticEvent.loc` is the innermost located node on the subject's chain (its own `loc`, else the first up the owners — a signal through its registering owner), found in `emitDiagnostic` the way `ownerPath` is; a host event that sets it keeps it. `reportDiagnostic` prints it as an `at` line after the `in` line — `at src/App.tsx:18:3`, or in a browser `at http://localhost:5173/src/App.tsx:18:3`, which the devtools link to the Sources panel. `DEV.guideUrl(code)` now returns the code's page on the docs site (`https://v2.solidjs.com/reference/solid-js/diagnostics/`). +- 1bcee91: Server components hydrate their client slot occurrences on demand. The adoption pass mounts none of them; an occurrence mounts when an event lands in it (outermost first, before the event reaches a handler), before any signal or store write applies (every remaining occurrence, against the server's state), or in idle slices after the load event. Hydration stays in progress until the last one has mounted. The write side is an internal pre-write hook in `@solidjs/signals`, tree-shaken from apps without server components. +- 61c4436: An async memo created inside a fresh Loading boundary over a held value no longer lands its first answer before the hold commits (D-12, U-1). The boundary still catches it and shows its fallback, and the hold still does not wait for it: its answer is staged with the hold and appears no earlier than the hold's commit. A boundary re-armed by `on` keeps owning what it collects outright. +- a39acdd: `GRAPH_GROWTH` no longer reports long-lived state that the page just left also read. What outlived a navigation was the set of nodes reachable as that one navigation opened, and the walk reaches a module-level source (solid-refresh's per-component registry signal in dev, a global store) only through a page that reads it. So arriving at a route from pages sharing more and more of its components, or of its global state, read as growth with nothing leaked. The nodes met as navigations open now go into one set kept for the session, so such a source counts the same at every settle once met, and only what keeps accumulating climbs. Leaked roots, ownerless effects and per-visit subscriptions still report as before. Fixes #4101. +- 0bda987: An error is an answer: it ends the wait like a value, and it shows when a value would (D-41). A rejection or throw on a node a transaction holds is staged and published with the frame that carries it: until then the screen, an untracked read, `createEffect`'s error arm and `` keep the previous frame, `isPending` is `true`, `latest` throws the proposed error, and `resolve`/`until`/`refresh` reject at the landing. A held recovery keeps the shown error until its own commit, and a recovery equal to the last good value now reaches effects, held or not (it was swallowed by the equality gate). Replaces the separate staged-error publish path. From #3886's audit (GabbeV). +- ccd9948: Smaller floor bundles: the optional engines (lanes, verdicts, boundaries, stores, affects, external sources) install their scheduler hooks as module variables, so an app that never loads them no longer retains their paths in `recompute`, `read` and the settle step; client-only `render` no longer retains hydration text adoption, and the delegated dispatcher drops dead guards. The JSX hello world goes from 10.35 KB to 9.75 KB brotli. +- dbc5d00: `SSR_BOUNDARY_WATERFALL` now judges a wait by when its work started, the same origin rule the client's `ASYNC_WATERFALL` uses. A nested route meets its levels one render pass at a time, but the router starts every matched level's `lazy()` import and preload together. Before, the first request to a cold server warned about a data waterfall that wasn't there. A wait whose work had all started before the previous wait landed is now left out of the count (`data.parallelWaits`). `lazy()` and `lazyModule()` stamp their imports. The start stamps move from the attribution engine to the core's `OBSERVE.attribution` (`markFlight`, `flightOrigin`), so a router or cache can stamp what it hands out without loading the engine. `attribution.markFlight` writes to the same place. +- 347f242: New dev check `SSR_LIVE_HOLE_LATCHED` (#4023): a live markup hole that shipped its markers and then stopped updating, because re-running it would create reactive scopes (most often a compiler condition memo for `{m.usage && …}`), is now named on the console, located by its component, instead of going quiet. Behavior is unchanged; hoisting the property into a local keeps the hole live. +- f3973ea: `mapArray` commits a structural change without rebuilding full-length copies of its row bookkeeping: a pass stages only the changed window, lands it into the live arrays in place with the unchanged suffix shifted by a loop, and rebuilds only the mapped array that signals the change downstream. A pass that only removes rows is matched with two pointers and no key map, and the key-chain array is sized to the window rather than to the edit's position. One-item inserts and removals on long keyed lists, every-nth removals and sparse filters no longer allocate several list-sized arrays per edit; the strong-abort contract for a mapper that suspends is unchanged, kept by ordering (verify, create, then mutate) instead of by copying. +- c12c420: An outer `on`-reset Loading boundary no longer waits for a flight its nested `on`-reset boundary catches (D-14, U-4). A pending reader forwarded through both boundaries while neither was collecting was recorded in both, so when one tick re-armed both the outer kept its fallback until the inner's flight landed. A reader a nested collecting boundary holds is now that boundary's alone: the outer's content shows beside the inner's fallback as soon as the outer's own work lands. +- a2d5669: Fix an optimistic row that showed, vanished and reappeared when several actions guessed the same list in quick succession: a guess made over a slot another action still holds now entangles with that action, so it stays until its own action settles instead of reverting with the earlier one. +- 4bc7969: fix(signals): a later mainline store setter that does not write a held key publishes on the mainline tick — a setter's written keys are its own set, so its notify visits only the keys it wrote (D-8, U-8, #3743) +- d3cddff: Attribution: `createProjection` records the owner in scope as `createStore` does, so a projection's property nodes carry an owner path (#4035). The `GRAPH_GROWTH` message and its skill section now name a cache that never evicts as a source of the same growth. +- c2513e3: A Loading boundary re-armed by `on` owns the content under it that reads a hold another change made (D-14, D-16, U-9). Before, that content joined the hold, so no fallback showed and the boundary reported pending, and a held tree under a re-armed boundary could redraw forever. Now the fallback shows with the re-arming change and the content reveals at the hold's commit, which no longer waits for it. A re-arm whose own change joins that hold still shows no fallback (the frame waits on the same data), and `LOADING_ON_OUTSIDE_HOLD` is reported only for a flight the change itself started. +- 3f36f77: Server components: binding slots are removed. Client components in slots replace them: place a client component through a `Slot` (``) where the server's markup needs client behavior, or a form `action` for a mutation. Removed with them: the `BindingSlot`, `SlotOutput` and `SlotError` types, the lazy `@solidjs/web/frames/bind` entry and its `"bind"` tier, the `_s:*` position markers and the compiled `ssrClaim` hole, the effect of the `serverComponents` compiler option (`@solidjs/compiler` and `@solidjs/babel-plugin` still accept it, so existing build configs keep working, and ignore it), and the `BINDING_SLOT_POSITION` diagnostic code (`@solidjs/signals`' `DiagnosticCode`, `solid-js`'s `diagnostics.json`). Ordinary slots, their `slot:` ranges and records, and `$key` are unchanged. +- dfb31ed: Derived stores no longer need a seed (#3194). `createStore(fn)`, `createProjection(fn)` and `createOptimisticStore(fn)` accept a derive that takes no draft and answers a complete value — sync, a promise, or an async iterable whose every yield is a complete snapshot. The root is a plain object (an array keeps its `[]` seed); pass `undefined` for the seed to reach the options, e.g. `createStore(fetchUser, undefined, { key: "email" })`. Until the first answer lands the store is unreadable, as with any seed (A25); `seedLoadingValue` needs a seed and is not offered on the seedless form. + + With the seedless form available, a seed is a complete `T` again (#3258's requirement, reverted then because async stores that needed the options slot had to invent one). A `{}` seed on a return-form derive is now a type error: drop it. A mutating derive that builds its object from an empty seed needs `{} as T`. + +- 3fc5551: `until()` and `refresh()` no longer retain the optimistic lane engine in apps that don't use optimism (−4.8 KB minified). An `until()` predicate reading a memo derived from an unconfirmed optimistic guess now waits for the guess to be confirmed or corrected, instead of seeing the value from before the guess. +- 42c2568: A memo that reads a verdict memo (`isPending`/`latest`) shows the verdict now, beside a held value it also reads (F-6, U-10, #4050). Before, it re-entered the hold with that value and the verdict waited for the landing: a Provider's children memo over a router shell `[, outlet]` never showed delayed pending feedback during a held navigation. It now behaves as the same probe read inline, or a render effect reading both, already did. + ## 2.0.0-rc.15 ### Patch Changes diff --git a/packages/signals/package.json b/packages/signals/package.json index 7d0e8b779e..8ba6214a43 100644 --- a/packages/signals/package.json +++ b/packages/signals/package.json @@ -1,6 +1,6 @@ { "name": "@solidjs/signals", - "version": "2.0.0-rc.15", + "version": "2.0.0-rc.16", "description": "Solid's reactive primitives: signals, memos, effects, stores, and async-aware computations.", "author": "Ryan Carniato", "license": "MIT", diff --git a/packages/solid/CHANGELOG.md b/packages/solid/CHANGELOG.md index b18c706051..f319e3bd7c 100644 --- a/packages/solid/CHANGELOG.md +++ b/packages/solid/CHANGELOG.md @@ -1,5 +1,60 @@ # solid-js +## 2.0.0-rc.16 + +### Patch Changes + +- 3d8a8a9: Point JSDoc `@description` links at the 2.0 reference docs (v2.solidjs.com), document `isPending`, point the console footer, diagnostics guide and cheatsheet links at the `next` branch, and replace the stale `onMount` advice in the server-side client-only API error. +- b8617ec: `createDeferred(fn, options?)`: an async memo that may lag, but never leads. Before its first answer it is an ordinary async memo (readers suspend to ``, or `loadingValue` shows). After it, a refetch holds nothing: readers keep the previous answer until the new one lands, the rest of the screen moves on, and `isPending` reports the refetch on the node and on everything derived from it, store keys included. A refetch that read a held value lands with that hold. A rejection errors like any memo. `refresh(d)` is a quiet re-ask, and `await refresh(d)` and `until` wait for the landing. It is `createMemo` on the server and hydrates like one. + + The rules: F-1 and F-2 are amended for declared lag, and D-40 / S-41 are new. The `affects()` mark core moved to its own module (`affects-marks.ts`), which `createDeferred` shares. A mark on the source of a derived store now covers that store's keys. + +- 4a99c84: `createComponent(Comp, props, name?, loc?)` takes the JSX site the compiler emits beside the tag (`"src/App.tsx:12:5"`); the dev and observe component owner carries it on both the client and the server, so a finding raised inside a component reports `at src/App.tsx:12:5` (and `event.loc`) when nothing closer was located. The console footer is now two lines: the code's docs page for a human (`what it means and how to fix it: https://v2.solidjs.com/reference/solid-js/diagnostics/`), then the repair skill for an agent (installed path and GitHub URL, anchored to the code's section). `diagnostics.json` links each code to its docs page, and the `reactivity-diagnostics` skill documents the `at` line. +- 0f64d82: `` escapes its children on the server (#4116). A boundary's content never passes a compiled `escape` hole, so `` escapes it itself; `` did not, and a string child (or an array of strings, or a function returning one) was written into the HTML raw — user text inside an error boundary became live markup, and the client's text node mismatched on hydrate. +- 467ac97: Hydration: a streamed `` fragment that is the first to carry a `lazy()` module's assets now loads them before its resume claims the revealed content, instead of rendering nothing while they load and clearing the parent's revealed nodes (#4087). +- 1bcee91: Server components hydrate their client slot occurrences on demand. The adoption pass mounts none of them; an occurrence mounts when an event lands in it (outermost first, before the event reaches a handler), before any signal or store write applies (every remaining occurrence, against the server's state), or in idle slices after the load event. Hydration stays in progress until the last one has mounted. The write side is an internal pre-write hook in `@solidjs/signals`, tree-shaken from apps without server components. +- dbc5d00: `SSR_BOUNDARY_WATERFALL` now judges a wait by when its work started, the same origin rule the client's `ASYNC_WATERFALL` uses. A nested route meets its levels one render pass at a time, but the router starts every matched level's `lazy()` import and preload together. Before, the first request to a cold server warned about a data waterfall that wasn't there. A wait whose work had all started before the previous wait landed is now left out of the count (`data.parallelWaits`). `lazy()` and `lazyModule()` stamp their imports. The start stamps move from the attribution engine to the core's `OBSERVE.attribution` (`markFlight`, `flightOrigin`), so a router or cache can stamp what it hands out without loading the engine. `attribution.markFlight` writes to the same place. +- 7c36f2b: Server `For` in a live hole: a row that read an async memo or projection besides its item, or whose item was edited in place, now renders again on each sweep instead of reusing stale markup. +- 0a49dd8: Live holes: on a live response, a sweep that changed some rows of a `` sends just those rows (replace, append, truncate by index), and the frames client morphs only their ranges. A client whose range doesn't show what the rows were taken against resumes its live connection, which sends the hole whole. +- 51d005a: Server `` keeps its rows across live-hole sweeps (#4056). A markup hole that re-emits (a live server component, a standing source) re-evaluated every row of a list on every write. During a sweep, a row whose item at the same index is unchanged (the same reference, or a shallow-equal object, as a live source's fresh snapshot usually is) now reuses the row it rendered on the previous sweep. Plain SSR and a server component's first render are unchanged. A row is a function of its item: an item mutated in place keeps its old row, and a row that reads outside data keeps the value it rendered with. +- c5da908: A live hole whose content calls a slot keeps updating. Before, the first re-run that called a slot latched the hole (`SSR_LIVE_HOLE_LATCHED`, cause "records"). Now each occurrence's identity belongs to its hole: it is its position there, or its `$key`. Calls outside any hole keep the ids they had. A re-run sends a record only for a new occurrence or for args that changed. On the client, the hole's morph resolves slot ranges against the frame's displaced-range index, the same way the root morph does. An occurrence that survives keeps its range, its interior and its mounted component, even when it moves into another hole. New occurrences mount and the ones that are gone dispose. Under deferred hydration, an occurrence that is not mounted yet claims its markup with the record that markup was rendered from, then takes the newer one. A live attribute that calls a slot still latches, and so does a re-run that creates owners. +- 3f36f77: Server components: binding slots are removed. Client components in slots replace them: place a client component through a `Slot` (``) where the server's markup needs client behavior, or a form `action` for a mutation. Removed with them: the `BindingSlot`, `SlotOutput` and `SlotError` types, the lazy `@solidjs/web/frames/bind` entry and its `"bind"` tier, the `_s:*` position markers and the compiled `ssrClaim` hole, the effect of the `serverComponents` compiler option (`@solidjs/compiler` and `@solidjs/babel-plugin` still accept it, so existing build configs keep working, and ignore it), and the `BINDING_SLOT_POSITION` diagnostic code (`@solidjs/signals`' `DiagnosticCode`, `solid-js`'s `diagnostics.json`). Ordinary slots, their `slot:` ranges and records, and `$key` are unchanged. +- eb4e019: Hydration no longer hydrates a streamed `` fallback when the fragment was already revealed but its `_fr` record hasn't settled yet (an async entry running between the two scripts). The boundary renders nothing and adopts the revealed content once the record settles (#4074). +- dfb31ed: Derived stores no longer need a seed (#3194). `createStore(fn)`, `createProjection(fn)` and `createOptimisticStore(fn)` accept a derive that takes no draft and answers a complete value — sync, a promise, or an async iterable whose every yield is a complete snapshot. The root is a plain object (an array keeps its `[]` seed); pass `undefined` for the seed to reach the options, e.g. `createStore(fetchUser, undefined, { key: "email" })`. Until the first answer lands the store is unreadable, as with any seed (A25); `seedLoadingValue` needs a seed and is not offered on the seedless form. + + With the seedless form available, a seed is a complete `T` again (#3258's requirement, reverted then because async stores that needed the options slot had to invent one). A `{}` seed on a return-form derive is now a type error: drop it. A mutating derive that builds its object from an empty seed needs `{} as T`. + +- 9ac1481: The server error hook (`configureServerErrors`, a render's `onError`) now hears each error object once per request — once per render when no request is in scope — instead of once per process (#4125). Reusing one `Error` object across requests (a module-level constant, a cached rejection) used to notify only the first request's hook and hand later requests the first request's mapped wire value; each request now gets its own report and its own answer. Within a request the hook hears an error once per `kind`: a direct server-function call that throws during SSR is heard as `server-function`, and the `` or `` that contains it is heard as `render`, so a render's `onError` alone tells you the render failed. Every road still carries the first mapped value. +- a61c929: A server component in a document marks its live holes only once the render has served something a later commit can replace: an async iterable it pumps, or a loading value or seed shown ahead of its landing. Until then a hole that resolves synchronously ships without `lh` markers, `data-lha` addresses or a ledger binding, because no channel op can ever address it. On a request/response page that is every hole: the 1,406-comment hackernews thread drops from 948 KB to 787 KB and renders in about half the server time. +- 3d8a8a9: Ship the Solid 2.0 primer for coding agents as the `solid-2.0` skill, emit `CHEATSHEET.md` as the `solid-2.0-cheatsheet` skill on build, give every shipped skill the `name`/`description` frontmatter the Agent Skills format requires, and add the `tanstack-intent` keyword so skill registries discover them in `node_modules`. +- 3d8a8a9: `solid-js` now ships `diagnostics.json` next to `CHEATSHEET.md`: the machine-readable catalog of every dev diagnostic code — `code`, `kind`, `severity`, `category`, `trigger`, `repair` (the first sentence of the code's section in the `reactivity-diagnostics` skill) and `guideUrl` (that section on GitHub). It is generated from the `DiagnosticCode` union, the RFC's quick-reference table and the skill by `pnpm diagnostics:json`, and a test fails when any of the three (or the committed file) names a different set of codes. The quick-reference table gains its missing `PRIMITIVE_IN_EFFECT_CALLBACK` row. +- 4ff6580: Server rendering: a suspended read unwinds to its boundary through fewer handler frames. `runWithOwner`, the sync memo's pull, `ssrScope` and `runWithBoundaryErrorContext` restore their state in one catch (and inline on the normal path) instead of a catch plus a finally, and a sync memo whose eager pull met a `NotReadyError` re-raises it for a read in the same synchronous turn instead of running the compute a second time. No behavior change; streaming pages with many pending boundaries flush their shell sooner. +- Updated dependencies [3d8a8a9] +- Updated dependencies [a7fe050] +- Updated dependencies [52008d9] +- Updated dependencies [0b6765f] +- Updated dependencies [b8617ec] +- Updated dependencies [3643c5e] +- Updated dependencies [4a99c84] +- Updated dependencies [1bcee91] +- Updated dependencies [61c4436] +- Updated dependencies [a39acdd] +- Updated dependencies [0bda987] +- Updated dependencies [ccd9948] +- Updated dependencies [dbc5d00] +- Updated dependencies [347f242] +- Updated dependencies [f3973ea] +- Updated dependencies [c12c420] +- Updated dependencies [a2d5669] +- Updated dependencies [4bc7969] +- Updated dependencies [d3cddff] +- Updated dependencies [c2513e3] +- Updated dependencies [3f36f77] +- Updated dependencies [dfb31ed] +- Updated dependencies [3fc5551] +- Updated dependencies [42c2568] + - @solidjs/signals@2.0.0-rc.16 + ## 2.0.0-rc.15 ### Patch Changes diff --git a/packages/solid/package.json b/packages/solid/package.json index 54e3bf9334..ce96295d8d 100644 --- a/packages/solid/package.json +++ b/packages/solid/package.json @@ -1,7 +1,7 @@ { "name": "solid-js", "description": "Reactive JavaScript library for building user interfaces. Compiles JSX to real DOM with fine-grained signal-based updates — no virtual DOM.", - "version": "2.0.0-rc.15", + "version": "2.0.0-rc.16", "author": "Ryan Carniato", "license": "MIT", "homepage": "https://solidjs.com", @@ -134,7 +134,7 @@ "tanstack-intent" ], "dependencies": { - "@solidjs/signals": "^2.0.0-rc.15", + "@solidjs/signals": "^2.0.0-rc.16", "csstype": "^3.1.0", "seroval": "1.6.7", "seroval-plugins": "1.6.7" diff --git a/packages/test-integration/CHANGELOG.md b/packages/test-integration/CHANGELOG.md index e35176cf95..46d55c4adb 100644 --- a/packages/test-integration/CHANGELOG.md +++ b/packages/test-integration/CHANGELOG.md @@ -1,5 +1,75 @@ # test-integration +## 2.0.0-rc.16 + +### Patch Changes + +- Updated dependencies [3d8a8a9] +- Updated dependencies [4a99c84] +- Updated dependencies [a7fe050] +- Updated dependencies [52008d9] +- Updated dependencies [0b6765f] +- Updated dependencies [b8617ec] +- Updated dependencies [3643c5e] +- Updated dependencies [86cf504] +- Updated dependencies [4a99c84] +- Updated dependencies [4a99c84] +- Updated dependencies [4a99c84] +- Updated dependencies [96b615d] +- Updated dependencies [0f64d82] +- Updated dependencies [467ac97] +- Updated dependencies [8092282] +- Updated dependencies [8163bc3] +- Updated dependencies [1bcee91] +- Updated dependencies [10b3f55] +- Updated dependencies [1f3b5b4] +- Updated dependencies [61c4436] +- Updated dependencies [a39acdd] +- Updated dependencies [0bda987] +- Updated dependencies [ccd9948] +- Updated dependencies [dbc5d00] +- Updated dependencies [0e0c043] +- Updated dependencies [7c36f2b] +- Updated dependencies [0a49dd8] +- Updated dependencies [51d005a] +- Updated dependencies [347f242] +- Updated dependencies [c5da908] +- Updated dependencies [b972757] +- Updated dependencies [8e2590e] +- Updated dependencies [f3973ea] +- Updated dependencies [8fbadfd] +- Updated dependencies [e1bf2af] +- Updated dependencies [e43e22f] +- Updated dependencies [c12c420] +- Updated dependencies [a2d5669] +- Updated dependencies [4bc7969] +- Updated dependencies [d3cddff] +- Updated dependencies [c2513e3] +- Updated dependencies [3f36f77] +- Updated dependencies [8e2590e] +- Updated dependencies [eb4e019] +- Updated dependencies [dfb31ed] +- Updated dependencies [8bd7a5b] +- Updated dependencies [9ac1481] +- Updated dependencies [3e94215] +- Updated dependencies [a61c929] +- Updated dependencies [36039e2] +- Updated dependencies [3d8a8a9] +- Updated dependencies [3d8a8a9] +- Updated dependencies [d0ba31c] +- Updated dependencies [4ff6580] +- Updated dependencies [8d4a285] +- Updated dependencies [8268cfd] +- Updated dependencies [3fc5551] +- Updated dependencies [42c2568] + - solid-js@2.0.0-rc.16 + - @solidjs/signals@2.0.0-rc.16 + - @solidjs/web@2.0.0-rc.16 + - @solidjs/babel-plugin@2.0.0-rc.16 + - @solidjs/h@2.0.0-rc.16 + - @solidjs/html@2.0.0-rc.16 + - @solidjs/universal@2.0.0-rc.16 + ## 2.0.0-rc.15 ### Patch Changes diff --git a/packages/test-integration/package.json b/packages/test-integration/package.json index aa2d9b972e..fc5a441676 100644 --- a/packages/test-integration/package.json +++ b/packages/test-integration/package.json @@ -21,5 +21,5 @@ "gitly": "^2.2.1", "shelljs": "^0.8.5" }, - "version": "2.0.0-rc.15" + "version": "2.0.0-rc.16" } diff --git a/packages/universal/CHANGELOG.md b/packages/universal/CHANGELOG.md index da4e93678e..30e1b877bd 100644 --- a/packages/universal/CHANGELOG.md +++ b/packages/universal/CHANGELOG.md @@ -1,5 +1,30 @@ # @solidjs/universal +## 2.0.0-rc.16 + +### Patch Changes + +- Updated dependencies [3d8a8a9] +- Updated dependencies [b8617ec] +- Updated dependencies [4a99c84] +- Updated dependencies [0f64d82] +- Updated dependencies [467ac97] +- Updated dependencies [1bcee91] +- Updated dependencies [dbc5d00] +- Updated dependencies [7c36f2b] +- Updated dependencies [0a49dd8] +- Updated dependencies [51d005a] +- Updated dependencies [c5da908] +- Updated dependencies [3f36f77] +- Updated dependencies [eb4e019] +- Updated dependencies [dfb31ed] +- Updated dependencies [9ac1481] +- Updated dependencies [a61c929] +- Updated dependencies [3d8a8a9] +- Updated dependencies [3d8a8a9] +- Updated dependencies [4ff6580] + - solid-js@2.0.0-rc.16 + ## 2.0.0-rc.15 ### Patch Changes diff --git a/packages/universal/package.json b/packages/universal/package.json index f552924330..b260c782d9 100644 --- a/packages/universal/package.json +++ b/packages/universal/package.json @@ -1,7 +1,7 @@ { "name": "@solidjs/universal", "description": "Solid's universal runtime for creating custom renderers", - "version": "2.0.0-rc.15", + "version": "2.0.0-rc.16", "author": "Ryan Carniato", "license": "MIT", "homepage": "https://solidjs.com", @@ -51,7 +51,7 @@ "test": "vitest run" }, "peerDependencies": { - "solid-js": "^2.0.0-rc.15" + "solid-js": "^2.0.0-rc.16" }, "devDependencies": { "solid-js": "workspace:*" diff --git a/packages/web/CHANGELOG.md b/packages/web/CHANGELOG.md index 5e20f3f2b7..0a2b54a9ea 100644 --- a/packages/web/CHANGELOG.md +++ b/packages/web/CHANGELOG.md @@ -1,5 +1,62 @@ # @solidjs/web +## 2.0.0-rc.16 + +### Patch Changes + +- 3d8a8a9: Point JSDoc `@description` links at the 2.0 reference docs (v2.solidjs.com), document `isPending`, point the console footer, diagnostics guide and cheatsheet links at the `next` branch, and replace the stale `onMount` advice in the server-side client-only API error. +- 86cf504: `data-*` attributes type-check in props objects (`ComponentProps<"div">`, `JSX.HTMLAttributes`), not only in JSX: a template-literal index signature on `ElementAttributes` (#4082). +- 4a99c84: `effect` and `insert` take `loc` beside `name` in their options, and `spread` a trailing `loc` after its tag — the source site the compiler emits under `sourceNames` `locations` — so a diagnostic about a compiled binding reports `at src/App.tsx:14:7` and carries `event.loc`. Dev and observe builds keep it on the node; production ignores it. +- 96b615d: Remove the internal `scriptNonce`/`styleNonce` exports from the server build. They stayed exported after #4016 only because `@solidjs/vite-plugin` ≤ 3.0.0-next.49 imported them. 3.0.0-next.50 projects the nonce itself (solidjs/solid-vite-plugin#409). Apps must use `@solidjs/vite-plugin` 3.0.0-next.50 or later with this release. +- 8092282: fix(frames): a link inside nested slot regions is claimed once per adoption instead of once per enclosing region, and a streaming document whose server components mint no tier writes an empty `sc:tiers` record so the client skips its per-element slot-marker scan +- 8163bc3: Send data server functions called during hydration on a page with server components (#4033). The frames client holds a server-function call while the document may still deliver a boundary for it, and a data function never has one. A wait created under a hydration trace cached the trace's never-settling `Promise` stub, so every later call for that function hung; and a call made after the page's last reveal (a hydration-end recompute) was released only by a reveal that never came. Waits made under a trace are no longer kept, and outstanding waits are released when hydration ends as well as on reveals. +- 1bcee91: Server components hydrate their client slot occurrences on demand. The adoption pass mounts none of them; an occurrence mounts when an event lands in it (outermost first, before the event reaches a handler), before any signal or store write applies (every remaining occurrence, against the server's state), or in idle slices after the load event. Hydration stays in progress until the last one has mounted. The write side is an internal pre-write hook in `@solidjs/signals`, tree-shaken from apps without server components. +- 10b3f55: Frames client: a live-hole apply no longer searches the frame for its marker on every write. Each hole's target is cached between applies and reused while it is still the frame's and still matches; otherwise the search runs as before. +- 1f3b5b4: fix(frames): a frame rendered off the live address marks only the holes that can change within its response (the document face's gate), so synchronous holes ship without `lh` markers, `data-lha` addresses or hole digests; the live address keeps every marker for its reconnect have-list +- ccd9948: Smaller floor bundles: the optional engines (lanes, verdicts, boundaries, stores, affects, external sources) install their scheduler hooks as module variables, so an app that never loads them no longer retains their paths in `recompute`, `read` and the settle step; client-only `render` no longer retains hydration text adoption, and the delegated dispatcher drops dead guards. The JSX hello world goes from 10.35 KB to 9.75 KB brotli. +- 0e0c043: Write one `data-lha` address on an element whose attribute was still pending inside a `` in a live server component (#4032). When the in-tag hole escalated, the attribute capture was dropped but the address it had spliced into the tag stayed, and the boundary's resume minted a second one in front of it. The stale address rode every later attr op for the element, so the first op moved the element off its bound address and every op after it was dropped. The address now goes with the dropped capture. +- 0a49dd8: Live holes: on a live response, a sweep that changed some rows of a `` sends just those rows (replace, append, truncate by index), and the frames client morphs only their ranges. A client whose range doesn't show what the rows were taken against resumes its live connection, which sends the hole whole. +- 347f242: New dev check `SSR_LIVE_HOLE_LATCHED` (#4023): a live markup hole that shipped its markers and then stopped updating, because re-running it would create reactive scopes (most often a compiler condition memo for `{m.usage && …}`), is now named on the console, located by its component, instead of going quiet. Behavior is unchanged; hoisting the property into a local keeps the hole live. +- c5da908: A live hole whose content calls a slot keeps updating. Before, the first re-run that called a slot latched the hole (`SSR_LIVE_HOLE_LATCHED`, cause "records"). Now each occurrence's identity belongs to its hole: it is its position there, or its `$key`. Calls outside any hole keep the ids they had. A re-run sends a record only for a new occurrence or for args that changed. On the client, the hole's morph resolves slot ranges against the frame's displaced-range index, the same way the root morph does. An occurrence that survives keeps its range, its interior and its mounted component, even when it moves into another hole. New occurrences mount and the ones that are gone dispose. Under deferred hydration, an occurrence that is not mounted yet claims its markup with the record that markup was rendered from, then takes the newer one. A live attribute that calls a slot still latches, and so does a re-run that creates owners. +- b972757: Live holes keep updating when their markup creates reactive scopes (a nested ``, a compiler condition memo such as `{m.usage && …}`, a component). Each re-render runs in a throwaway scope disposed once its markup is out; only a scope still waiting on async work closes the hole (#4023). +- 8e2590e: Hydrating a `` whose `lazy()` module lands after hydration starts no longer moves its server-rendered nodes when the boundary has a sibling in the same fragment (#4049). A sibling before the boundary used to swap the boundary's static and lazy children (A/C/B instead of A/B/C), and a sibling after it detached and re-attached the boundary's content, restarting CSS animations and blurring a focused input. The late claim now leaves server nodes in place when they already sit in the region, in order, around the nodes the insert was tracking. +- 8fbadfd: Frames morph: when a text hole empties, the reconcile drops the stale text node instead of relocating the next element in front of it, so the elements after an emptied text hole stay put instead of being re-inserted. +- e1bf2af: Frames morph skips an identical subtree with one native `isEqualNode` compare instead of walking it. +- e43e22f: Server components: a client fill nested in server content that another fill places (a region) now sees the context that enclosing fill provides, on the server render, at hydration (eager or deferred, including an inner occurrence mounting first) and for occurrences a stream or live hole adds later. On the server, a fill called while an enclosing occurrence's args evaluate renders when the region is placed, under the placing owner; the region's usage flip runs after the fill's output has resolved, so content placed inside a provider (whose children resolve in the walk) ships as markup instead of an occluded record. On the client, a nested fill mounts under the owner that read the region, waits while the region is unplaced, and mounts afresh at the next placement after one is disposed. A fill's two claim windows now share one claim owner, so a fill rooted at a context provider claims its server markup instead of rendering a detached copy. +- 3f36f77: Server components: binding slots are removed. Client components in slots replace them: place a client component through a `Slot` (``) where the server's markup needs client behavior, or a form `action` for a mutation. Removed with them: the `BindingSlot`, `SlotOutput` and `SlotError` types, the lazy `@solidjs/web/frames/bind` entry and its `"bind"` tier, the `_s:*` position markers and the compiled `ssrClaim` hole, the effect of the `serverComponents` compiler option (`@solidjs/compiler` and `@solidjs/babel-plugin` still accept it, so existing build configs keep working, and ignore it), and the `BINDING_SLOT_POSITION` diagnostic code (`@solidjs/signals`' `DiagnosticCode`, `solid-js`'s `diagnostics.json`). Ordinary slots, their `slot:` ranges and records, and `$key` are unchanged. +- 8e2590e: `respond(value, init)` accepts every value a plain return does (#4060). Its passthrough JSON body — read only by consumers without the client runtime — is now encoded when read instead of when the envelope is built, so a `bigint` no longer throws inside `respond()` and fails both the direct call and the HTTP call. Unscripted HTTP callers get the carried JSON body only when JSON carries the value faithfully; otherwise the value is encoded the same way as a plain return. +- 8bd7a5b: Bind each server-component site to its own frame when the server minted the sites in a different order than the client mounts them (#4042). Document adoption took sites of one server function by ordinal (`id`, `id~2`, …), so a site behind async setup, rendered after its neighbours on the server but mounted first on the client, adopted a neighbour's element, and its first update landed in the wrong frame. A document frame for a call with arguments now carries the call's argument hash (`data-fa`), and a mount takes the unclaimed site showing its own arguments, falling back to the first unclaimed site when none does. Argless calls render byte-identical markup. +- 9ac1481: The server error hook (`configureServerErrors`, a render's `onError`) now hears each error object once per request — once per render when no request is in scope — instead of once per process (#4125). Reusing one `Error` object across requests (a module-level constant, a cached rejection) used to notify only the first request's hook and hand later requests the first request's mapped wire value; each request now gets its own report and its own answer. Within a request the hook hears an error once per `kind`: a direct server-function call that throws during SSR is heard as `server-function`, and the `` or `` that contains it is heard as `render`, so a render's `onError` alone tells you the render failed. Every road still carries the first mapped value. +- 3e94215: Server functions: arguments never decode `Response` or `Request` values. The handler decodes client → server argument payloads with the configured plugin list minus the `Response`/`Request` plugins, so a call carrying one — top level, nested, or inside a promise or stream — is refused with `400` before the function runs. `enableRichArguments()` rejects such a call before sending. Results and hydration keep the full plugin set. + + Server-function responses now default to `X-Content-Type-Options: nosniff`; a value the function sets itself is kept. + +- a61c929: A server component in a document marks its live holes only once the render has served something a later commit can replace: an async iterable it pumps, or a loading value or seed shown ahead of its landing. Until then a hole that resolves synchronously ships without `lh` markers, `data-lha` addresses or a ledger binding, because no channel op can ever address it. On a request/response page that is every hole: the 1,406-comment hackernews thread drops from 948 KB to 787 KB and renders in about half the server time. +- 36039e2: The shell-end marker is spliced in before `` instead of being appended after `` when the shell is a whole document (#4030). Async render mode and a stream with nothing pending now end with `` again; a shell without `` (an embedded render) still gets the marker appended. +- 3d8a8a9: Ship the Solid 2.0 primer for coding agents as the `solid-2.0` skill, emit `CHEATSHEET.md` as the `solid-2.0-cheatsheet` skill on build, give every shipped skill the `name`/`description` frontmatter the Agent Skills format requires, and add the `tanstack-intent` keyword so skill registries discover them in `node_modules`. +- 8d4a285: A cleanup that throws while a stream is torn down no longer crashes the server (#4029). Aborting `renderToStream`'s `signal` disposes the render inside the `abort` listener, where a throw became an uncaught exception; the teardown now reports it through `onError` as a failed render (`handling: "failed"`) and finishes. +- 8268cfd: Server trace and span ids (the W3C `traceparent` a render mints when the request carries none) are drawn from `Math.random` instead of `crypto.getRandomValues`. The ids need to be unique and well spread, not unguessable, which is also OpenTelemetry's default; the two `getRandomValues` calls cost about 10 µs per streamed render on Node, around 14% of the CPU between a request and its first chunk. +- Updated dependencies [3d8a8a9] +- Updated dependencies [b8617ec] +- Updated dependencies [4a99c84] +- Updated dependencies [0f64d82] +- Updated dependencies [467ac97] +- Updated dependencies [1bcee91] +- Updated dependencies [dbc5d00] +- Updated dependencies [7c36f2b] +- Updated dependencies [0a49dd8] +- Updated dependencies [51d005a] +- Updated dependencies [c5da908] +- Updated dependencies [3f36f77] +- Updated dependencies [eb4e019] +- Updated dependencies [dfb31ed] +- Updated dependencies [9ac1481] +- Updated dependencies [a61c929] +- Updated dependencies [3d8a8a9] +- Updated dependencies [3d8a8a9] +- Updated dependencies [4ff6580] + - solid-js@2.0.0-rc.16 + ## 2.0.0-rc.15 ### Patch Changes diff --git a/packages/web/package.json b/packages/web/package.json index f85887550d..2e4635c1e6 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -1,7 +1,7 @@ { "name": "@solidjs/web", "description": "Solid's web runtime: client rendering, hydration, SSR, and DOM-specific control flow (Portal, Dynamic).", - "version": "2.0.0-rc.15", + "version": "2.0.0-rc.16", "author": "Ryan Carniato", "license": "MIT", "homepage": "https://solidjs.com", @@ -377,7 +377,7 @@ "seroval-plugins": "1.6.7" }, "peerDependencies": { - "solid-js": "^2.0.0-rc.15" + "solid-js": "^2.0.0-rc.16" }, "devDependencies": { "@codspeed/vitest-plugin": "^5.4.0",