Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 41 additions & 0 deletions .changeset/pre.json
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@
"async-waterfall-attribution",
"attribution-feedback-facts",
"attribution-feedback-tables",
"attribution-navigation-origin",
"attribution-unstable-memo-output",
"attribution-wide-write",
"attribution-write-provenance",
Expand Down Expand Up @@ -99,6 +100,7 @@
"commit-clears-transition-stamp",
"companion-oracle-census",
"companion-shadow-redesign",
"compiler-component-names",
"compiler-loader-accepts-patch-driver",
"compiler-loader-prefer-local-build",
"composed-header-bounds-transport",
Expand All @@ -122,6 +124,7 @@
"dev-error-invalid-refresh-target",
"dev-error-non-function-component",
"dev-error-untracked-async-read",
"dev-gate-lazy-hydration-diagnostics",
"dev-invariant-assertions",
"dev-tools-cleanup",
"dev-warn-scripted-304",
Expand All @@ -138,6 +141,7 @@
"document-action-mutation-navigation-framing",
"document-control-flow-callback-shapes",
"document-entry-only-handler-wrap",
"document-event-request-contract",
"document-face-live-holes-client",
"document-live-slot-args-client",
"document-shell-hydration-docs",
Expand All @@ -160,6 +164,7 @@
"enforce-provide-event-single-invocation",
"export-memo-options",
"expose-enableExternalSource-loading-on",
"extract-nested-server-function-declarations",
"fail-untagged-2xx-responses",
"fetch-option-retry-contract",
"fill-cleanup-occurrence-scope",
Expand Down Expand Up @@ -193,10 +198,12 @@
"fix-composed-header-bounds",
"fix-conditional-async-reveal-pending",
"fix-content-length-guard-bypass",
"fix-contested-effect-rederive",
"fix-cookie-bounds-and-validity",
"fix-create-projection-seed-inference",
"fix-dead-transition-stamp-revival",
"fix-decoder-collision-orphaned-promise",
"fix-deep-chained-view-subscription",
"fix-deep-optimistic-store-pending",
"fix-deep-snapshot-held-landing-visibility",
"fix-derived-event-locals-sharing",
Expand All @@ -219,6 +226,7 @@
"fix-error-carrier-hidden-data-slots",
"fix-errored-derive-memo-parity",
"fix-errored-loading-hydration-ids",
"fix-finalize-reentry-effect-ownership",
"fix-flash-url-unbound-base",
"fix-flatten-needsunwrap-or",
"fix-flight-owned-transaction",
Expand Down Expand Up @@ -247,7 +255,9 @@
"fix-keyed-affects-cross-family",
"fix-keyed-show-strict-read",
"fix-lane-ambient-write-replay",
"fix-lane-authority-store-twins",
"fix-lane-merge-transaction-ownership",
"fix-lane-recompute-compares-published-slot",
"fix-late-fragment-boundary-claims",
"fix-late-server-component-boundary-adoption",
"fix-latest-async-memo-lifecycle",
Expand All @@ -273,6 +283,7 @@
"fix-maparray-async-store-settle-wedge",
"fix-maparray-notready-exception-safety",
"fix-memo-created-inside-latest-window",
"fix-merged-lane-hold-per-node",
"fix-mid-recompute-missed-wakes",
"fix-nested-array-async-reconcile",
"fix-nested-boundary-foreign-status",
Expand All @@ -289,6 +300,7 @@
"fix-optimistic-store-stash-flicker",
"fix-optimistic-undefined-override",
"fix-overlay-adoption-reset",
"fix-override-supersession-on-arrival",
"fix-owned-write-guard-docs",
"fix-ownerless-conditional-memos",
"fix-pending-autodispose-release",
Expand Down Expand Up @@ -336,7 +348,9 @@
"fix-resolve-rejection-settlement",
"fix-response-aliasing-cookie-leak",
"fix-resting-optimistic-async-commit",
"fix-reveal-carve-out-input-visibility",
"fix-reveal-frontier-errored-boundary",
"fix-reveal-holds-on-lane-flight",
"fix-scheduler-child-queue-removal",
"fix-select-empty-value-ssr",
"fix-server-dynamic-promise-source",
Expand Down Expand Up @@ -364,6 +378,7 @@
"fix-ssr-async-error-handling",
"fix-ssr-bench-shape",
"fix-ssr-errored-async-retry-loop",
"fix-ssr-escape-function-results",
"fix-ssr-loading-errored-hydration",
"fix-ssr-memo-promise-notready",
"fix-ssr-owner-id-parity",
Expand All @@ -373,6 +388,7 @@
"fix-ssr-retry-child-reset",
"fix-ssr-retry-convergence-oom",
"fix-ssr-server-projection-pending-store",
"fix-ssr-spread-children-read-once",
"fix-ssr-stream-rejected-fragment-hang",
"fix-ssr-sync-memo-child-id-leak",
"fix-ssr-textarea-spread-value",
Expand Down Expand Up @@ -411,6 +427,7 @@
"fix-validate-document-shell",
"fix-version-skew-label-before-gate",
"flash-falsy-nojs-outcomes",
"flash-key-derivation",
"flatten-promise-of-async-iterable",
"fluffy-bananas-smoke",
"fold-runtime-wrappers",
Expand All @@ -433,16 +450,19 @@
"gate-child-companion-walk",
"gate-invariants-to-test-builds",
"get-read-contract",
"golf-effect-ownership-flag",
"graph-size-diagnostics",
"guard-error-carried-failure-channels",
"guard-failures-iterative-walk",
"guard-getter-and-map-key-channels",
"halt-reactivity-on-uncaught-error",
"handle-async-setter-errors",
"head-shell-hold-probe-seam",
"heap-mark-incremental",
"hide-internal-type-exports",
"hoist-web-protocol-components",
"hot-scope-fanout-aggregation",
"html-braced-comments",
"html-element-claims",
"hydrating-store-engine-seam",
"hydration-primitive-wrappers",
Expand Down Expand Up @@ -471,6 +491,7 @@
"lazy-async-inflight-autodispose",
"lazy-children-storepath",
"lazy-client-only-export-option",
"lazy-hydration-failure-visibility",
"lazy-hydration-id-asset-keys",
"lazy-nohydration-renders",
"lazy-preload-assets",
Expand All @@ -489,6 +510,7 @@
"lone-spread-no-merge",
"long-hold-and-stricter-thresholds",
"maparray-nonkeyed-store-stale-row",
"maparray-small-move-fast-path",
"maparray-swap-commit",
"mean-bats-grin",
"migrate-web-runtime-to-ts",
Expand All @@ -503,6 +525,9 @@
"nohydration-lazy-maparray-deps",
"notready-skip-stack-capture",
"npm-descriptions",
"observe-node-shapes",
"observe-shape-freeze",
"observe-tier",
"optimistic-draft-reads-compose-over-staged-truth",
"optimistic-landing-fold",
"optimistic-lists-drivable",
Expand Down Expand Up @@ -551,15 +576,18 @@
"preload-identity-qualifiers",
"preserve-bound-event-tuples",
"preserve-store-symbol-snapshots",
"projection-leaf-release",
"projection-lists-drivable",
"projection-root-entity-swap",
"projection-root-write-overlay",
"propagation-hot-path-regression",
"protect-server-functions-csrf",
"purple-mayflies-give",
"question-scoped-pending-affects",
"rc-api-freeze-pass",
"reaction-rearm-replaces",
"read-every-body-the-transport-tees",
"rebuild-buffered-request-from-parts",
"reconcile-array-object-shape-guard",
"reconcile-default-id-positional-null",
"reconcile-symbol-keyed-nodes",
Expand All @@ -581,12 +609,17 @@
"refresh-lifts-stale-manual-write-mask",
"refreshable-type-alias",
"refusals-commit-event-stub",
"refuse-flush-in-action-body",
"refuse-invalid-wrap-invocation-values",
"refuse-unknown-body-format-tags-as-version-skew",
"refuse-unstorable-flash-cookies",
"register-settle-walk-diagnostic-code",
"reject-server-directive-on-methods",
"reject-this-arguments-server-function-capture",
"reject-unsupported-server-module-exports",
"relocate-uninit-lane-check",
"remove-capturing-event-listeners",
"remove-cjs",
"remove-create-effect-single-argument-overload",
"remove-derived-initial-values",
"remove-dist-exports-and-fix-dual-types",
Expand All @@ -605,6 +638,7 @@
"republish-fresh-signals-build",
"require-client-source-commit-zero",
"require-seroval-1-5-4",
"require-seroval-1-6",
"response-head-lifecycle",
"responsive-preload-links",
"reveal-order-prop",
Expand All @@ -631,6 +665,7 @@
"server-function-guard-simplification",
"server-function-http-hygiene",
"server-function-path-addressing",
"server-function-path-names",
"server-function-types-not-any",
"server-functions-client-fetch",
"server-memo-commit-liveness",
Expand All @@ -641,13 +676,15 @@
"server-store-replacement-optimistic-noop",
"setter-row-ops-tentative-lists",
"settle-superseded-flight-dependents",
"settle-unchanged-pending-branches",
"settle-walk-dev-invariant",
"settle-walk-invariant-completion",
"settle-walk-requires-initialization",
"sever-reveal-group-at-boundaries",
"shallow-compiled-slot-channel",
"shallow-slot-alignment-samevaluezero",
"shallow-stores-markraw",
"share-server-function-registry-across-reloads",
"shared-effect-status-notifier",
"shell-gate-first-apply",
"signals-dev-cjs",
Expand All @@ -665,6 +702,7 @@
"snapshot-hydration-safety",
"snapshot-trailing-holes",
"solid-native-frame-protocol-identifiers",
"spread-direct-sources",
"ssr-falsy-rejections-and-thenables",
"ssr-hole-id-scopes",
"ssr-retry-robustness",
Expand All @@ -679,6 +717,7 @@
"store-first-read-diet",
"store-hot-path-trims",
"store-next-settled-visibility",
"store-owner-stamp",
"store-pending-overlay",
"store-platform-objects-raw",
"store-rewrite-creation-perf",
Expand All @@ -701,6 +740,7 @@
"store-structural-hot-path-pass",
"store-thenable-probe-strict-read",
"store-treeshakeable-optimism",
"store-write-floor-narrow",
"stream-demand-gate",
"strict-untrack-warning",
"strictread-untrack-parameter",
Expand All @@ -718,6 +758,7 @@
"tighten-show-match-jsx-types",
"tiny-lions-jam",
"track-applied-classes",
"tracked-style-class-objects",
"transform-result-sees-thrown-errors",
"transparent-devcomponent",
"transparent-effect-option-typed",
Expand Down
26 changes: 26 additions & 0 deletions packages/babel-plugin/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,31 @@
# @solidjs/babel-plugin

## 2.0.0-rc.8

### Patch Changes

- 01ac18c: Compiler `componentNames` option: component owner labels that survive minification. With the flag on, DOM output carries the tag as written in source as a third `createComponent` argument — `<Home />` compiles to `createComponent(Home, props, "Home")`, `<Ui.Button />` to `"Ui.Button"`, `<this.Row />` to `"this.Row"` — and the dev and observe runtimes label the component's owner with it (`<Home>` in diagnostic `ownerPath`s, attribution chains, and the devtools `_component.name`), falling back to `Comp.name` as before. Until now an observe-tier production bundle reported hot scopes and holds under whatever the minifier left of the function name (`<Xt> › <Kn>`), and a `lazy()` or HMR wrapper hid the tag name even in dev. Off by default and byte-identical output when off; SSR (which inlines the call) and universal output never emit it; the production `createComponent` ignores the argument. Both compilers implement it in parity (shared fixtures, cross-mode ratchet). `@solidjs/vite-plugin` enables it for the dev and `observe` postures.
- 7d985b6: Fix SSR XSS: strings yielded by flow-control memos rendered unescaped

`<Show when={s}>{s}</Show>`, `<For>{v => v}</For>`, `<Dynamic component={() => s} />`,
`<Switch>/<Match>`, boundary fallbacks and any component that returns a string through a
memo rendered that string raw on the server. The server flow controls return memos for
hydration-id alignment; `escape()` passed functions through by identity, and the resolver
appended whatever they later produced without escaping.

One rule now: `escape(x)` at a hole covers everything reachable from `x` — strings, array
items, and what a function yields when the resolver calls it (a deferred-escape wrapper).
Finished `{ t }` nodes pass through. `Loading` escapes its content the way it already
escaped its fallback. The compilers stop wrapping fragment / mixed component children in
`_$escape` (they are values; escaping them too double-escaped through
`<Comp>{props.children}</Comp>`), and a single-expression fragment at a hole keeps the
hole's wrap. Live-hole tags ride the wrapper and `$slot` survives the array copy, so
frames behave as before.

- ab4c40c: Object-valued `style` / `class` bindings are read in the TRACKED half of their effect. `style()` and `className()` enumerate their object in the effect's untracked commit phase, so a proxy value — a store sub-object (`style={state.style}`, `class={row.classes}`), merged props, anything arriving through a spread — was identity-reactive only: in-place key mutations never re-applied, and every leaf read tripped `STRICT_READ_UNTRACKED` in dev. Both compilers now wrap the compute value of a non-inline `style={expr}` / `class={expr}` in a new compiler primitive, `readShallow()`, and `spread()` applies it to those two keys as it copies. `readShallow` is an identity passthrough for strings, plain objects and proxy-free arrays (a fresh literal is already the compute's own — the common case pays a `typeof`); a proxy is copied with one `ownKeys` trap (its own trap keeps the key set tracked) plus one tracked read per key; arrays are re-mapped only when an element is a proxy. Inline literals are untouched — they already compile per property. Provably-string expressions (string/template literals, concatenation) and literal objects/arrays skip the wrap at compile time. New Tier-1 bench `style-class-object`: plain-object rows at parity; store-backed rows go from identity-only (and, in dev, ~97 ms per 500 elements of diagnostics) to per-key reactive at ~3.5 ms. Octane svg-dashboard (prod build, store-backed style/attrs through spread): mount at parity, style_spread_pulse −6%, select_toggle −7%.

`spread()` shares the same enumeration: its compute half copied the source with `for…in` + `hasOwn`, which on a proxy source (`merge()`/`omit()`, `{...props}` in a component, store records — nearly every spread) is an `ownKeys` trap plus two `getOwnPropertyDescriptor` traps per key, each allocating a descriptor and a getter closure. It now takes the key set from one `Reflect.ownKeys` trap (the trap keeps the key set tracked) and reads each string key once; plain sources use `Object.keys`, the exact own-enumerable set the old loop yielded. New Tier-1 bench `spread-enumerate` (500 elements, 8 keys): `merge(static, reactive)` 376 → 537 ops/s (+43%), store record 253 → 415 ops/s (+64%), plain object at parity.

## 2.0.0-rc.7

### Patch Changes
Expand Down
2 changes: 1 addition & 1 deletion packages/babel-plugin/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@solidjs/babel-plugin",
"description": "Babel compiler plugin for Solid templates",
"version": "2.0.0-rc.7",
"version": "2.0.0-rc.8",
"author": "Ryan Carniato",
"license": "MIT",
"repository": {
Expand Down
Loading