Repository navigation
Commit 00a26fd
📦 Publish SDKs (#4885)
This PR was opened by the [Changesets
release](https://github.com/changesets/action) GitHub action. When
you're ready to do a release, you can merge this and the packages will
be published to npm automatically. If you're not ready to do a release
yet, that's fine, whenever you add more changesets to main, this PR will
be updated.
# Releases
## @builder.io/sdk-react@5.3.0
### Minor Changes
- 86019dc: Faster rendering, and rendering no longer mutates the content
object:
- Blocks without bindings are processed once per block and locale
instead of on every render; localized values are resolved without
modifying the content (fixes the wrong locale showing when the same
content object is rendered with a different `locale`).
- Bindings are applied copy-on-write instead of deep-cloning the block.
- The component registry is built once per registration instead of on
every `Content`/`Symbol` render.
- Node: `isolated-vm` evaluations reuse a periodically recycled isolate
(fresh context per evaluation) with cached scripts, and pure state
expressions over plain data (e.g. `!state.open`, `state.$index + 1`)
skip the sandbox; expressions that would read getters or class instances
still run in it.
- Browser: binding functions are compiled once per code string.
- Compiled-expression and path caches are bounded and evict the oldest
entry instead of clearing; the processed-block cache keeps only the
latest locale per block.
- Node: `jsCode` that sets state with `Object.assign(state, {...})` no
longer throws inside `isolated-vm`, and nested state writes
(`state.user.name = ...`) and `delete state.x` update root state at the
full path instead of writing a stray top-level key.
Behavior changes. These fix bugs, but code that relied on the old
behavior will see a difference:
- Content state (`data.state`, input defaults) is copied per render, so
state written during a render no longer appears on the content object
you passed in, and can no longer leak into a cached content object.
- Node: writes and deletes on `context`, `builder` and `event` in
`jsCode` no longer reach root state.
- Node: function values assigned to state in `jsCode` are skipped on the
server instead of throwing.
- `set`, `setCopyOnWrite` and `unset` follow only own properties and use
the same path rule: `__proto__` is never allowed, and
`constructor`/`prototype` only as the final key.
- The default `.builder-button` reset now has zero specificity
(`:where(.builder-button)`), so a button's own block styles win even
when a later `Content` on the page emits the reset after them. Global
`button` rules in your own CSS now also apply to Builder buttons.
## @builder.io/sdk-react-native@5.3.0
### Minor Changes
- 86019dc: Faster rendering, and rendering no longer mutates the content
object:
- Blocks without bindings are processed once per block and locale
instead of on every render; localized values are resolved without
modifying the content (fixes the wrong locale showing when the same
content object is rendered with a different `locale`).
- Bindings are applied copy-on-write instead of deep-cloning the block.
- The component registry is built once per registration instead of on
every `Content`/`Symbol` render.
- Node: `isolated-vm` evaluations reuse a periodically recycled isolate
(fresh context per evaluation) with cached scripts, and pure state
expressions over plain data (e.g. `!state.open`, `state.$index + 1`)
skip the sandbox; expressions that would read getters or class instances
still run in it.
- Browser: binding functions are compiled once per code string.
- Compiled-expression and path caches are bounded and evict the oldest
entry instead of clearing; the processed-block cache keeps only the
latest locale per block.
- Node: `jsCode` that sets state with `Object.assign(state, {...})` no
longer throws inside `isolated-vm`, and nested state writes
(`state.user.name = ...`) and `delete state.x` update root state at the
full path instead of writing a stray top-level key.
Behavior changes. These fix bugs, but code that relied on the old
behavior will see a difference:
- Content state (`data.state`, input defaults) is copied per render, so
state written during a render no longer appears on the content object
you passed in, and can no longer leak into a cached content object.
- Node: writes and deletes on `context`, `builder` and `event` in
`jsCode` no longer reach root state.
- Node: function values assigned to state in `jsCode` are skipped on the
server instead of throwing.
- `set`, `setCopyOnWrite` and `unset` follow only own properties and use
the same path rule: `__proto__` is never allowed, and
`constructor`/`prototype` only as the final key.
- The default `.builder-button` reset now has zero specificity
(`:where(.builder-button)`), so a button's own block styles win even
when a later `Content` on the page emits the reset after them. Global
`button` rules in your own CSS now also apply to Builder buttons.
## @builder.io/sdk-solid@5.3.0
### Minor Changes
- 86019dc: Faster rendering, and rendering no longer mutates the content
object:
- Blocks without bindings are processed once per block and locale
instead of on every render; localized values are resolved without
modifying the content (fixes the wrong locale showing when the same
content object is rendered with a different `locale`).
- Bindings are applied copy-on-write instead of deep-cloning the block.
- The component registry is built once per registration instead of on
every `Content`/`Symbol` render.
- Node: `isolated-vm` evaluations reuse a periodically recycled isolate
(fresh context per evaluation) with cached scripts, and pure state
expressions over plain data (e.g. `!state.open`, `state.$index + 1`)
skip the sandbox; expressions that would read getters or class instances
still run in it.
- Browser: binding functions are compiled once per code string.
- Compiled-expression and path caches are bounded and evict the oldest
entry instead of clearing; the processed-block cache keeps only the
latest locale per block.
- Node: `jsCode` that sets state with `Object.assign(state, {...})` no
longer throws inside `isolated-vm`, and nested state writes
(`state.user.name = ...`) and `delete state.x` update root state at the
full path instead of writing a stray top-level key.
Behavior changes. These fix bugs, but code that relied on the old
behavior will see a difference:
- Content state (`data.state`, input defaults) is copied per render, so
state written during a render no longer appears on the content object
you passed in, and can no longer leak into a cached content object.
- Node: writes and deletes on `context`, `builder` and `event` in
`jsCode` no longer reach root state.
- Node: function values assigned to state in `jsCode` are skipped on the
server instead of throwing.
- `set`, `setCopyOnWrite` and `unset` follow only own properties and use
the same path rule: `__proto__` is never allowed, and
`constructor`/`prototype` only as the final key.
- The default `.builder-button` reset now has zero specificity
(`:where(.builder-button)`), so a button's own block styles win even
when a later `Content` on the page emits the reset after them. Global
`button` rules in your own CSS now also apply to Builder buttons.
## @builder.io/sdk-svelte@5.3.0
### Minor Changes
- 86019dc: Faster rendering, and rendering no longer mutates the content
object:
- Blocks without bindings are processed once per block and locale
instead of on every render; localized values are resolved without
modifying the content (fixes the wrong locale showing when the same
content object is rendered with a different `locale`).
- Bindings are applied copy-on-write instead of deep-cloning the block.
- The component registry is built once per registration instead of on
every `Content`/`Symbol` render.
- Node: `isolated-vm` evaluations reuse a periodically recycled isolate
(fresh context per evaluation) with cached scripts, and pure state
expressions over plain data (e.g. `!state.open`, `state.$index + 1`)
skip the sandbox; expressions that would read getters or class instances
still run in it.
- Browser: binding functions are compiled once per code string.
- Compiled-expression and path caches are bounded and evict the oldest
entry instead of clearing; the processed-block cache keeps only the
latest locale per block.
- Node: `jsCode` that sets state with `Object.assign(state, {...})` no
longer throws inside `isolated-vm`, and nested state writes
(`state.user.name = ...`) and `delete state.x` update root state at the
full path instead of writing a stray top-level key.
Behavior changes. These fix bugs, but code that relied on the old
behavior will see a difference:
- Content state (`data.state`, input defaults) is copied per render, so
state written during a render no longer appears on the content object
you passed in, and can no longer leak into a cached content object.
- Node: writes and deletes on `context`, `builder` and `event` in
`jsCode` no longer reach root state.
- Node: function values assigned to state in `jsCode` are skipped on the
server instead of throwing.
- `set`, `setCopyOnWrite` and `unset` follow only own properties and use
the same path rule: `__proto__` is never allowed, and
`constructor`/`prototype` only as the final key.
- The default `.builder-button` reset now has zero specificity
(`:where(.builder-button)`), so a button's own block styles win even
when a later `Content` on the page emits the reset after them. Global
`button` rules in your own CSS now also apply to Builder buttons.
## @builder.io/sdk-vue@5.3.0
### Minor Changes
- 86019dc: Faster rendering, and rendering no longer mutates the content
object:
- Blocks without bindings are processed once per block and locale
instead of on every render; localized values are resolved without
modifying the content (fixes the wrong locale showing when the same
content object is rendered with a different `locale`).
- Bindings are applied copy-on-write instead of deep-cloning the block.
- The component registry is built once per registration instead of on
every `Content`/`Symbol` render.
- Node: `isolated-vm` evaluations reuse a periodically recycled isolate
(fresh context per evaluation) with cached scripts, and pure state
expressions over plain data (e.g. `!state.open`, `state.$index + 1`)
skip the sandbox; expressions that would read getters or class instances
still run in it.
- Browser: binding functions are compiled once per code string.
- Compiled-expression and path caches are bounded and evict the oldest
entry instead of clearing; the processed-block cache keeps only the
latest locale per block.
- Node: `jsCode` that sets state with `Object.assign(state, {...})` no
longer throws inside `isolated-vm`, and nested state writes
(`state.user.name = ...`) and `delete state.x` update root state at the
full path instead of writing a stray top-level key.
Behavior changes. These fix bugs, but code that relied on the old
behavior will see a difference:
- Content state (`data.state`, input defaults) is copied per render, so
state written during a render no longer appears on the content object
you passed in, and can no longer leak into a cached content object.
- Node: writes and deletes on `context`, `builder` and `event` in
`jsCode` no longer reach root state.
- Node: function values assigned to state in `jsCode` are skipped on the
server instead of throwing.
- `set`, `setCopyOnWrite` and `unset` follow only own properties and use
the same path rule: `__proto__` is never allowed, and
`constructor`/`prototype` only as the final key.
- The default `.builder-button` reset now has zero specificity
(`:where(.builder-button)`), so a button's own block styles win even
when a later `Content` on the page emits the reset after them. Global
`button` rules in your own CSS now also apply to Builder buttons.
## @builder.io/sdk-angular@0.25.19
### Patch Changes
- 86019dc: Faster rendering, and rendering no longer mutates the content
object:
- Blocks without bindings are processed once per block and locale
instead of on every render; localized values are resolved without
modifying the content (fixes the wrong locale showing when the same
content object is rendered with a different `locale`).
- Bindings are applied copy-on-write instead of deep-cloning the block.
- The component registry is built once per registration instead of on
every `Content`/`Symbol` render.
- Node: `isolated-vm` evaluations reuse a periodically recycled isolate
(fresh context per evaluation) with cached scripts, and pure state
expressions over plain data (e.g. `!state.open`, `state.$index + 1`)
skip the sandbox; expressions that would read getters or class instances
still run in it.
- Browser: binding functions are compiled once per code string.
- Compiled-expression and path caches are bounded and evict the oldest
entry instead of clearing; the processed-block cache keeps only the
latest locale per block.
- Node: `jsCode` that sets state with `Object.assign(state, {...})` no
longer throws inside `isolated-vm`, and nested state writes
(`state.user.name = ...`) and `delete state.x` update root state at the
full path instead of writing a stray top-level key.
Behavior changes. These fix bugs, but code that relied on the old
behavior will see a difference:
- Content state (`data.state`, input defaults) is copied per render, so
state written during a render no longer appears on the content object
you passed in, and can no longer leak into a cached content object.
- Node: writes and deletes on `context`, `builder` and `event` in
`jsCode` no longer reach root state.
- Node: function values assigned to state in `jsCode` are skipped on the
server instead of throwing.
- `set`, `setCopyOnWrite` and `unset` follow only own properties and use
the same path rule: `__proto__` is never allowed, and
`constructor`/`prototype` only as the final key.
- The default `.builder-button` reset now has zero specificity
(`:where(.builder-button)`), so a button's own block styles win even
when a later `Content` on the page emits the reset after them. Global
`button` rules in your own CSS now also apply to Builder buttons.
## @builder.io/sdk-react-nextjs@0.25.19
### Patch Changes
- 86019dc: Faster rendering, and rendering no longer mutates the content
object:
- Blocks without bindings are processed once per block and locale
instead of on every render; localized values are resolved without
modifying the content (fixes the wrong locale showing when the same
content object is rendered with a different `locale`).
- Bindings are applied copy-on-write instead of deep-cloning the block.
- The component registry is built once per registration instead of on
every `Content`/`Symbol` render.
- Node: `isolated-vm` evaluations reuse a periodically recycled isolate
(fresh context per evaluation) with cached scripts, and pure state
expressions over plain data (e.g. `!state.open`, `state.$index + 1`)
skip the sandbox; expressions that would read getters or class instances
still run in it.
- Browser: binding functions are compiled once per code string.
- Compiled-expression and path caches are bounded and evict the oldest
entry instead of clearing; the processed-block cache keeps only the
latest locale per block.
- Node: `jsCode` that sets state with `Object.assign(state, {...})` no
longer throws inside `isolated-vm`, and nested state writes
(`state.user.name = ...`) and `delete state.x` update root state at the
full path instead of writing a stray top-level key.
Behavior changes. These fix bugs, but code that relied on the old
behavior will see a difference:
- Content state (`data.state`, input defaults) is copied per render, so
state written during a render no longer appears on the content object
you passed in, and can no longer leak into a cached content object.
- Node: writes and deletes on `context`, `builder` and `event` in
`jsCode` no longer reach root state.
- Node: function values assigned to state in `jsCode` are skipped on the
server instead of throwing.
- `set`, `setCopyOnWrite` and `unset` follow only own properties and use
the same path rule: `__proto__` is never allowed, and
`constructor`/`prototype` only as the final key.
- The default `.builder-button` reset now has zero specificity
(`:where(.builder-button)`), so a button's own block styles win even
when a later `Content` on the page emits the reset after them. Global
`button` rules in your own CSS now also apply to Builder buttons.
## @builder.io/sdk-qwik@0.25.19
### Patch Changes
- 86019dc: Faster rendering, and rendering no longer mutates the content
object:
- Blocks without bindings are processed once per block and locale
instead of on every render; localized values are resolved without
modifying the content (fixes the wrong locale showing when the same
content object is rendered with a different `locale`).
- Bindings are applied copy-on-write instead of deep-cloning the block.
- The component registry is built once per registration instead of on
every `Content`/`Symbol` render.
- Node: `isolated-vm` evaluations reuse a periodically recycled isolate
(fresh context per evaluation) with cached scripts, and pure state
expressions over plain data (e.g. `!state.open`, `state.$index + 1`)
skip the sandbox; expressions that would read getters or class instances
still run in it.
- Browser: binding functions are compiled once per code string.
- Compiled-expression and path caches are bounded and evict the oldest
entry instead of clearing; the processed-block cache keeps only the
latest locale per block.
- Node: `jsCode` that sets state with `Object.assign(state, {...})` no
longer throws inside `isolated-vm`, and nested state writes
(`state.user.name = ...`) and `delete state.x` update root state at the
full path instead of writing a stray top-level key.
Behavior changes. These fix bugs, but code that relied on the old
behavior will see a difference:
- Content state (`data.state`, input defaults) is copied per render, so
state written during a render no longer appears on the content object
you passed in, and can no longer leak into a cached content object.
- Node: writes and deletes on `context`, `builder` and `event` in
`jsCode` no longer reach root state.
- Node: function values assigned to state in `jsCode` are skipped on the
server instead of throwing.
- `set`, `setCopyOnWrite` and `unset` follow only own properties and use
the same path rule: `__proto__` is never allowed, and
`constructor`/`prototype` only as the final key.
- The default `.builder-button` reset now has zero specificity
(`:where(.builder-button)`), so a button's own block styles win even
when a later `Content` on the page emits the reset after them. Global
`button` rules in your own CSS now also apply to Builder buttons.
<!-- CURSOR_SUMMARY -->
---
> [!NOTE]
> **Medium Risk**
> The published SDKs ship documented rendering, SSR state, sandbox, and
CSS behavior changes that can break apps relying on mutating shared
content or old jsCode side effects, even though this PR only updates
versions and changelogs.
>
> **Overview**
> This **Changesets release PR** removes the consumed
`.changeset/fast-gen2-rendering.md` entry and bumps all Gen2 SDK
packages so npm can publish: **patch** releases for
`@builder.io/sdk-angular`, `@builder.io/sdk-react-nextjs`, and
`@builder.io/sdk-qwik` (**0.25.19**), and **minor** releases for
`@builder.io/sdk-react`, `@builder.io/sdk-react-native`,
`@builder.io/sdk-solid`, `@builder.io/sdk-svelte`, and
`@builder.io/sdk-vue` (**5.3.0**). Each package gets the same new
**CHANGELOG** section for commit **86019dc** (no runtime source changes
appear in this diff).
>
> That release note documents **faster rendering and immutability of the
content object you pass in**: block/locale caching, copy-on-write
bindings, one-time component registry builds, bounded caches, and
Node/browser eval optimizations. It also calls out **intentional
behavior shifts**—per-render state copies, stricter Node `jsCode` /
`set` / `unset` rules, and `.builder-button` reset CSS using
`:where()`—that integrators should read before upgrading.
>
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
b12111a. Bugbot is set up for automated
code reviews on this repo. Configure
[here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>1 parent 86019dc commit 00a26fd
17 files changed
Lines changed: 184 additions & 36 deletions
File tree
- .changeset
- packages/sdks/output
- angular
- nextjs
- qwik
- react-native
- react
- solid
- svelte
- vue
This file was deleted.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
3 | 25 | | |
4 | 26 | | |
5 | 27 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
| 3 | + | |
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
3 | 25 | | |
4 | 26 | | |
5 | 27 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
4 | | - | |
| 4 | + | |
5 | 5 | | |
6 | 6 | | |
7 | 7 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
3 | 25 | | |
4 | 26 | | |
5 | 27 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
| 3 | + | |
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
3 | 25 | | |
4 | 26 | | |
5 | 27 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
4 | | - | |
| 4 | + | |
5 | 5 | | |
6 | 6 | | |
7 | 7 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
3 | 25 | | |
4 | 26 | | |
5 | 27 | | |
| |||
0 commit comments